最近在写一个局域网聊天室,其中碰到了这样一个问题.
    我写了一个客户端和一个服务端,服务端向客户端发送字符串"welcome",紧接着又向客户端发送字符串"list",在客户端在死循环中用networkstream.read方法接收字符串,但是每次都是在同一次循环中接收到了"welcomelist",我要的效果是welcome和list在两次循环中分别接收到,想想应该是在本地做测试的缘故,由于服务端发送的速度太快,没等客户端接收完"welcome",缓冲区中又被紧接着写入了"list",于是networkstream的read方法认为这是一起发送过来的,于是照单全收了.我在客户端换成socket的receive方法也出现了同样的问题.
    我不想在服务端写什么sleep语句,那样我认为不是完美的解决方法.除了sleep方法还有别的方法吗?哪位有写网络程序经验的大大帮忙回答一下.

解决方案 »

  1.   

    能否这样:在客户端收到"welcome"后给服务端一个信息,服务端在收到客户端的响应信息后再发送"list"
      

  2.   

    http://www.cnblogs.com/ydong/archive/2007/05/06/737026.html这是我写的小程序。没有你说的问题,你可以试试。不过必须得两台机器测试。
      

  3.   

    这种问题在TCP/IP通讯中是很常见的问题。被称之为“粘包”现象。
    要避免这种问题你可以设计自己的封包格式,或者在发送端和接收端作处理。个人认为设计封包是最好的办法,因为这样不会降低Socket的性能。