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();
服务器端接受到客户端的连接请求后,立马发送消息,然后关闭连接。客户端则连接成功后,立马读取消息,然后关闭连接。我的问题就是:是否会存在这么一种情况:服务器发送完消息,然后关闭连接;客户端还没来得及读取,服务器端就关闭连接了,会不会读取不到信息???
(本人第一次接触网络编程,希望各位高手指教) 展开
程序也基本实现了,如下所示:
服务端:
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();
服务器端接受到客户端的连接请求后,立马发送消息,然后关闭连接。客户端则连接成功后,立马读取消息,然后关闭连接。我的问题就是:是否会存在这么一种情况:服务器发送完消息,然后关闭连接;客户端还没来得及读取,服务器端就关闭连接了,会不会读取不到信息???
(本人第一次接触网络编程,希望各位高手指教) 展开
4个回答
威孚半导体技术
2024-08-19 广告
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层...
点击进入详情页
本回答由威孚半导体技术提供
展开全部
不会出现你说的情况,tcpclient在close时,内部会调用Shutdown(SocketShutdown.Both),可以保证所有数据都发送完成后,再关闭。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
服务器断开了客户端当然就无法访问了,不过现实情况中服务器断开的情况是很少的,你加点异常处理不就好了?
追问
是这样,我的目的就是客户端与服务器连接后,服务器给客户端发个消息就完事了,结束通信。我想知道的就是在服务器端发送完消息,然后调用Client.Close();客户端会不会收不到消息?
追答
我个人觉得不会收到,信号不像物质有惯性,还可以继续运动,要传输信息必须有连接吧。不过我也不是很懂。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
服务器要想关闭 就要发Fin给 客户端 再未收到客户端返回的 应答ACK和 标识客户端完成工作的FIN命令时 是不会关闭的 除非超时~你可以去瞅瞅TCP/IP的协议
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询