日期:2014-05-18  浏览次数:20751 次

关于TcpClient收发数据的小问题,求解
最近在做一个网络程序,从最简单的TcpClient/TcpListener模型的入手,实现功能:
1、Client向Server发送字符串“Hello Server”并在Server端弹出MessageBox;
2、Server收到Client发来的字符串之后,再向Client发送字符串“I got you, client”并在Client端弹出MessageBox。


目前1已经实现了,但是2有点问题,主要在Client上,相关代码(Client):
NetworkStream ns = client.GetStream();
byte[] bs1 = Encoding.Unicode.GetBytes("Hello Server");
ns.Write(bs1,0,bs1.Length);//向ns写入数据发送到Server端
byte[] bs2 = new byte[1024];
ns.Read(bs2,0,bs2.Length);//从ns读出Server发到Client的数据
MessageBox.Show(Encoding.Unicode.GetString(bs2));


问题就出在加注释的两行代码,Client在向Server发出数据之后似乎并没有阻塞并等待Server端发回“I got you, client”,而是在发出“Hello Server”之后紧接着就向下走又从ns读数据,导致ns.Read(bs2,0,bs2.Length)这行代码读出来的bs2为空数据。


请问各位高手如何在Client发送"Hello Server"之后阻塞下来等到Server端向ns写入数据之后再继续读呢?

------解决方案--------------------
你应该是非阻塞模式吧,你要判断是否读到数据