用deplphi制作即时通讯时,
服务器端用一个nmudp来截取客户端的信息,然后发一个回复给客户端
客户端也用一个nmudp来作类似的处理但是若一台机器上同时运行多个客户端程序,IP和端口号相同,结果服务器发来的消息总被第一个客户端截取,第二个客户端程序收不到信息,有谁能解释一下这是为什么,
若两个客户端IP和端口号相同,则同时都能收到服务器信息,该如何处理?

解决方案 »

  1.   

    我今天又看了一下我原来的程序,三个客户端(同一程序执行三个实例,应当可以了吧),服务器程序中也有个客户端,加起来就是四个客户了,都是可行的。
    服务器组件与客户组件的端口相同(Port:96224)服务器程序: 
      Client1.Host:=EditServer.Text;
      Server1.Active:=True;
      Client1.Active:=True;客户程序:
      WeightClient1.Host:=EditServer.Text;
      WeightClient1.Active:=True;服务器发数据:
      Client1.SendEvent(mydata);
      //因这两个组件是我改写的,其实此处是调用了TCustomSocket.Socket.SendText(tmpStr)
      服务器接收到数据便转发(写在组件代码中了,表面上看不到)。内部代码是
    在其OnClientRead中做以下事情:
     for idx:=1 to self.Socket.ActiveConnections do
        begin
           try
            self.Socket.Connections[idx-1].SendText(myPStr^);  //发送最后一个EndFlag前的数据。
           except
           end;
        end;
         delete(myPStr^,1,EndLocation); 以上代码因是从我的程序中抄下来,所以比较乱,其实就是TCustomServerSocket.Socket.Connections[idx-1].SendText而已。