我在服务器端这样写:
   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说说吗?

解决方案 »

  1.   

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

  2.   

    QQ发送信息原理?
    基于TCP/IP协议栈的啊,使用TCP或者UDP传输层协议啊 但TX在应用层是使用自己的私有QQ协议 而这协议是没有开放出来的 
      

  3.   

    只要应用层的协议弄明白了  剩下的交给IdTCP就OK了 比直接用Socket方便的多
      

  4.   

    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;
      

  5.   


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

  6.   

    当一个账号登录成功后 服务器会记录下来这个账号的ID 和该ID与服务器的socket连接。
    发送消息时 只需要告诉服务器 你要发给哪个ID就行了 服务器自然会把消息转发给这个ID。上面是中转的模式,点对点是另外一回事
      

  7.   

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