QQ发送信息原理?

时间:2022-12-14 14:40:06
   
我在服务器端这样写:
   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协议 而这协议是没有开放出来的 

#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;

#7


qq采用的好像是upd而不是tcp

#8


TCP/IP
和UDP都采用

#9


引用 6 楼 hj3000 的回复:
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;


我客户端哪个HANDLE我在服务器端不知道啊。

#10


当一个账号登录成功后 服务器会记录下来这个账号的ID 和该ID与服务器的socket连接。
发送消息时 只需要告诉服务器 你要发给哪个ID就行了 服务器自然会把消息转发给这个ID。

上面是中转的模式,点对点是另外一回事

#11


定义个消息头,里面包含帐号。

#12


你应该在tcpserver上建一个数据结构  然后把这个数据结构弄一个数组  客户登陆后 这个列表保存这个客户的ip 账户 还有 SocketHandle  
直接根据ip不好 因为很可能一个网吧有多个机器连到你服务器咋办 

#13


帐号和连接在服务器中做个对应关系

#14


没搞出来,不过还是结了。

#1


还有 ServerSocket.Socket.Connections[i].RemotePort 呢

#2


这个也是必要的,但还是不能决定某个连接。

#3


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;

#7


qq采用的好像是upd而不是tcp

#8


TCP/IP
和UDP都采用

#9


引用 6 楼 hj3000 的回复:
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;


我客户端哪个HANDLE我在服务器端不知道啊。

#10


当一个账号登录成功后 服务器会记录下来这个账号的ID 和该ID与服务器的socket连接。
发送消息时 只需要告诉服务器 你要发给哪个ID就行了 服务器自然会把消息转发给这个ID。

上面是中转的模式,点对点是另外一回事

#11


定义个消息头,里面包含帐号。

#12


你应该在tcpserver上建一个数据结构  然后把这个数据结构弄一个数组  客户登陆后 这个列表保存这个客户的ip 账户 还有 SocketHandle  
直接根据ip不好 因为很可能一个网吧有多个机器连到你服务器咋办 

#13


帐号和连接在服务器中做个对应关系

#14


没搞出来,不过还是结了。