C# TcpListener与TcpClient通信问题

我现在有这么一个简单的通信需求。在服务器端有一个Listener在监听,客户端发起一个连接,服务器端接受该连接,然后发送一个消息给客户端;客户端接收到消息后,就可以结束本次通信了。
程序也基本实现了,如下所示:
服务端:
IPAddress localip = IPAddress.Parse("192.168.1.113");
listener = new TcpListener(localip, 3571);
listener.Start();
while(true)
{
//等待客户端连接;
TcpClient client = listener.AcceptTcpClient();
//确定连接后,发送信息;
String msg = “test message”;
NetworkStream clientStream = client.GetStream();
byte[] temp = Encoding.Unicode.GetBytes(msg);
clientStream.Write(temp, 0, temp.Length);
//发送完毕后关闭连接;
client.Close();

}

客户端:
//连接服务器
client = new TcpClient();
try
{
client.Connect("192.168.1.113", 3571);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
//读取信息
NetworkStream serverStream = client.GetStream();
byte[] buffer = new byte[BufferSize];
int bytesread = serverStream.Read(buffer, 0, BufferSize);
String message = Encoding.Unicode.GetString(buffer, 0, BufferSize);
MessageBox.Show(message);
//关闭连接
client.Close();

服务器端接受到客户端的连接请求后,立马发送消息,然后关闭连接。客户端则连接成功后,立马读取消息,然后关闭连接。我的问题就是:是否会存在这么一种情况:服务器发送完消息,然后关闭连接;客户端还没来得及读取,服务器端就关闭连接了,会不会读取不到信息???
(本人第一次接触网络编程,希望各位高手指教)

不会 , 服务器端 发送消息也是 建立一个客户端 然后通过监听去发送的 , 实际上 是 服务器上的一个客户端 给 一个客户端 发送消息 不是 服务器本身给你发送消息 服务器的监听 一直存在。 说的有点乱 好好屡屡啊追问

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-01-19
不会出现你说的情况,tcpclient在close时,内部会调用Shutdown(SocketShutdown.Both),可以保证所有数据都发送完成后,再关闭。
第2个回答  2014-12-23
服务器断开了客户端当然就无法访问了,不过现实情况中服务器断开的情况是很少的,你加点异常处理不就好了?追问

是这样,我的目的就是客户端与服务器连接后,服务器给客户端发个消息就完事了,结束通信。我想知道的就是在服务器端发送完消息,然后调用Client.Close();客户端会不会收不到消息?

追答

我个人觉得不会收到,信号不像物质有惯性,还可以继续运动,要传输信息必须有连接吧。不过我也不是很懂。

第3个回答  2015-07-03
服务器要想关闭 就要发Fin给 客户端 再未收到客户端返回的 应答ACK和 标识客户端完成工作的FIN命令时 是不会关闭的 除非超时~你可以去瞅瞅TCP/IP的协议
相似回答