每次CLIENT端的发送,对应的SERVER端会产生相应的RECV动作。如果你要达到你的要求,在发送时就要组装成一个包。你的数据包结构可以这样写:TSetIp1 
TSetIp2 
这两个象你原来的结构一样。
再定义个大的结构。把它俩包起来。TBuff = record
  SetIp1:TSetIp1;
  SetIp2:TSetIp2;
end;发送时,
var
  buff:Tbuff;
begin
...
  .SendBuf (buff,sizeof(buff));
...
end;接收时
var
 recv:TBuff;
begin
...
    .ReceiveBuf (recv,Sizeof(ReceiveLength));
...
end;这样就可以了。这也是网络协议的收发基础。希望有帮助。:)  

解决方案 »

  1.   

      首先谢谢cow()兄的指点. 但这种方法我试了,和定义一个总结构(即部分set_ip1和setip2)是一样的.原因可能还是是因为passwd[] 为byte数组,ip为dword类型,系统不知道自动补0000.  我想如果放在一个byte[] 总数组中是可以的. 但我希望解决的问题是是能处理到clientsocket分段发送的东西。即不管发送几次,我可以顺序接收。通过报头,包尾处理.我以前曾做过一个串口报警程序(vb).  我不是用事件触发型,而是不断的扫描串口缓冲区.一个个的取,将他放到一个顺序数组里,通过包头 包尾 定义的长度处理 但socket 我不知道怎么办.
      再次感谢cow()兄的指点.
      

  2.   

    顺便问一下一个奇怪的问题:  我接收的ReceiveLength 都是为零.  
    还有  ReceiveBuf (recv,Sizeof(ReceiveLength));中为什么 要Sizeof(ReceiveLength)