C# TcpListener与TcpClient通信问题

我现在有这么一个简单的通信需求。在服务器端有一个Listener在监听,客户端发起一个连接,服务器端接受该连接,然后发送一个消息给客户端;客户端接收到消息后,就可以结束本... 我现在有这么一个简单的通信需求。在服务器端有一个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();

服务器端接受到客户端的连接请求后,立马发送消息,然后关闭连接。客户端则连接成功后,立马读取消息,然后关闭连接。我的问题就是:是否会存在这么一种情况:服务器发送完消息,然后关闭连接;客户端还没来得及读取,服务器端就关闭连接了,会不会读取不到信息???
(本人第一次接触网络编程,希望各位高手指教)
展开
 我来答
Beyond_Shan
2014-12-19 · TA获得超过1252个赞
知道小有建树答主
回答量:932
采纳率:40%
帮助的人:525万
展开全部
不会 , 服务器端 发送消息也是 建立一个客户端 然后通过监听去发送的 , 实际上 是 服务器上的一个客户端 给 一个客户端 发送消息 不是 服务器本身给你发送消息 服务器的监听 一直存在。 说的有点乱 好好屡屡啊
追问

Storm代理
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto... 点击进入详情页
本回答由Storm代理提供
超大蒲公英
2015-01-19 · TA获得超过741个赞
知道小有建树答主
回答量:758
采纳率:75%
帮助的人:741万
展开全部
不会出现你说的情况,tcpclient在close时,内部会调用Shutdown(SocketShutdown.Both),可以保证所有数据都发送完成后,再关闭。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2014-12-23 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7813万
展开全部
服务器断开了客户端当然就无法访问了,不过现实情况中服务器断开的情况是很少的,你加点异常处理不就好了?
追问
是这样,我的目的就是客户端与服务器连接后,服务器给客户端发个消息就完事了,结束通信。我想知道的就是在服务器端发送完消息,然后调用Client.Close();客户端会不会收不到消息?
追答
我个人觉得不会收到,信号不像物质有惯性,还可以继续运动,要传输信息必须有连接吧。不过我也不是很懂。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
为啥啊不能重名
2015-07-03 · TA获得超过459个赞
知道小有建树答主
回答量:889
采纳率:0%
帮助的人:319万
展开全部
服务器要想关闭 就要发Fin给 客户端 再未收到客户端返回的 应答ACK和 标识客户端完成工作的FIN命令时 是不会关闭的 除非超时~你可以去瞅瞅TCP/IP的协议
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式