当用两个TWindsock,UDP服务端模式 绑定不同的端口,怎么存在数据乱串的现象,第一个UDP接受事件里怎么收到另外一个UDP端口的数据?

解决方案 »

  1.   

    其实我的意思是想问大家,有没有谁用过TWinsock 这个控件,拖两个控件出来分别绑定两个端口,接收数据这快有没问题,怀疑控件有问题。
      

  2.   

    TWinsock这个控件你可以看看它的源代码
      

  3.   

    建议换Indy的吧。
    可以的话把你服务器端代码贴出来
      

  4.   

    打开端口
    function TFormComm.StartUdpService():Boolean;
    var
      fIPStr:string;
    begin
      m_UdpSocket.Close;
      m_PortOpen:=True;
      m_UDPSocket.LocalPort:=m_CommParams.PortNumber;
      try
        fIPStr:=GetLocalIPAddr();
        m_UdpSocket.Bind(m_CommParams.PortNumber);
      except
        m_PortOpen:=False;
      end;
      if m_PortOpen then
        AddCommRecord('.启动服务成功!')
      else
        AddCommRecord('.启动服务失败!');
      Result:=m_PortOpen;  
    end;
      

  5.   

    接收数据事件var
      i,c,p1,p2,count,fsize:integer;
      tmpOle:Olevariant;
      Buffer:Pointer;
      fstr,m_RemoteAddress,ftest,tmpStr:string;
      fOld,fNew:Word;
      m_TempRece,m_RealeseRecv:TCRCDataBuf;
    begin
      tmpOle:=VarArrayCreate([0,bytesTotal-1],varByte);
      try
        m_UdpSocket.GetData(tmpOle,varbyte+vararray,bytesTotal);
      except
       
      end;  Buffer:=varArraylock(tmpOle);
      Copymemory(@m_TempRece,Buffer,bytestotal);  VarArrayUnLock(tmpOle);
      //设置接收数据时间
      m_LastTime:=GetTickCount();
      //显示接收数据大小
      AddCommRecord('.');
      fsize:=bytesTotal;
      m_RemoteAddress:=m_UDPSocket.RemoteHostIP+':'+IntToStr(m_UDPSocket.RemotePort);
      fstr:=Format('.从 "%s:%d" 接收数据,大小: %d ...',[m_UDPSocket.RemoteHostIP,m_UDPSocket.RemotePort,fsize]);
      AddCommRecord(fstr,clBlue);
      
      //数据处理
      。
    end;
      

  6.   

    你能确定绑定的端口不是同一个吗?
    m_UdpSocket.Bind(m_CommParams.PortNumber);