我在服务器端这样写:
if (ServerSocket.Socket.Connections[i].RemoteAddress = IP) then //IP是指定的
begin
sMessage := 'NewInfo'
ServerSocket.Socket.Connections[i].SendText(sMessage);
Break;
end;
这样只能指定发送到某个IP地址的某个连接,但还是不能判断出这个IP地址连接中客户端是哪一个帐号(比如一个客户端登陆几个QQ帐号)
请问 ServerSocket.Socket.Connections[i].(还有其它条件定位吗????RemoteAddress是定位IP)
QQ发送信息的原理是怎么样的?能用ServerSocket说说吗?
14 个解决方案
#1
还有 ServerSocket.Socket.Connections[i].RemotePort 呢
#2
这个也是必要的,但还是不能决定某个连接。
#3
QQ发送信息原理?
基于TCP/IP协议栈的啊,使用TCP或者UDP传输层协议啊 但TX在应用层是使用自己的私有QQ协议 而这协议是没有开放出来的
基于TCP/IP协议栈的啊,使用TCP或者UDP传输层协议啊 但TX在应用层是使用自己的私有QQ协议 而这协议是没有开放出来的
#4
能用ServerSocket实现吗?
#5
只要应用层的协议弄明白了 剩下的交给IdTCP就OK了 比直接用Socket方便的多
#6
SocketHandle
//发送信息到指定客户端
Procedure TForm1.Send_Msg(tohand: Integer);
Var
I: Integer;
Begin
With ServerSocket1.Socket Do
Begin
For I := 0 To ActiveConnections - 1 Do
Begin
If Connections[I].SocketHandle = tohand Then
Begin
Connections[I].SendText('msg');
Break;
End;
End;
End;
End;
//发送信息到指定客户端
Procedure TForm1.Send_Msg(tohand: Integer);
Var
I: Integer;
Begin
With ServerSocket1.Socket Do
Begin
For I := 0 To ActiveConnections - 1 Do
Begin
If Connections[I].SocketHandle = tohand Then
Begin
Connections[I].SendText('msg');
Break;
End;
End;
End;
End;
#7
qq采用的好像是upd而不是tcp
#8
TCP/IP
和UDP都采用
和UDP都采用
#9
我客户端哪个HANDLE我在服务器端不知道啊。
#10
当一个账号登录成功后 服务器会记录下来这个账号的ID 和该ID与服务器的socket连接。
发送消息时 只需要告诉服务器 你要发给哪个ID就行了 服务器自然会把消息转发给这个ID。
上面是中转的模式,点对点是另外一回事
发送消息时 只需要告诉服务器 你要发给哪个ID就行了 服务器自然会把消息转发给这个ID。
上面是中转的模式,点对点是另外一回事
#11
定义个消息头,里面包含帐号。
#12
你应该在tcpserver上建一个数据结构 然后把这个数据结构弄一个数组 客户登陆后 这个列表保存这个客户的ip 账户 还有 SocketHandle
直接根据ip不好 因为很可能一个网吧有多个机器连到你服务器咋办
直接根据ip不好 因为很可能一个网吧有多个机器连到你服务器咋办
#13
帐号和连接在服务器中做个对应关系
#14
没搞出来,不过还是结了。
#1
还有 ServerSocket.Socket.Connections[i].RemotePort 呢
#2
这个也是必要的,但还是不能决定某个连接。
#3
QQ发送信息原理?
基于TCP/IP协议栈的啊,使用TCP或者UDP传输层协议啊 但TX在应用层是使用自己的私有QQ协议 而这协议是没有开放出来的
基于TCP/IP协议栈的啊,使用TCP或者UDP传输层协议啊 但TX在应用层是使用自己的私有QQ协议 而这协议是没有开放出来的
#4
能用ServerSocket实现吗?
#5
只要应用层的协议弄明白了 剩下的交给IdTCP就OK了 比直接用Socket方便的多
#6
SocketHandle
//发送信息到指定客户端
Procedure TForm1.Send_Msg(tohand: Integer);
Var
I: Integer;
Begin
With ServerSocket1.Socket Do
Begin
For I := 0 To ActiveConnections - 1 Do
Begin
If Connections[I].SocketHandle = tohand Then
Begin
Connections[I].SendText('msg');
Break;
End;
End;
End;
End;
//发送信息到指定客户端
Procedure TForm1.Send_Msg(tohand: Integer);
Var
I: Integer;
Begin
With ServerSocket1.Socket Do
Begin
For I := 0 To ActiveConnections - 1 Do
Begin
If Connections[I].SocketHandle = tohand Then
Begin
Connections[I].SendText('msg');
Break;
End;
End;
End;
End;
#7
qq采用的好像是upd而不是tcp
#8
TCP/IP
和UDP都采用
和UDP都采用
#9
我客户端哪个HANDLE我在服务器端不知道啊。
#10
当一个账号登录成功后 服务器会记录下来这个账号的ID 和该ID与服务器的socket连接。
发送消息时 只需要告诉服务器 你要发给哪个ID就行了 服务器自然会把消息转发给这个ID。
上面是中转的模式,点对点是另外一回事
发送消息时 只需要告诉服务器 你要发给哪个ID就行了 服务器自然会把消息转发给这个ID。
上面是中转的模式,点对点是另外一回事
#11
定义个消息头,里面包含帐号。
#12
你应该在tcpserver上建一个数据结构 然后把这个数据结构弄一个数组 客户登陆后 这个列表保存这个客户的ip 账户 还有 SocketHandle
直接根据ip不好 因为很可能一个网吧有多个机器连到你服务器咋办
直接根据ip不好 因为很可能一个网吧有多个机器连到你服务器咋办
#13
帐号和连接在服务器中做个对应关系
#14
没搞出来,不过还是结了。