qq_43996672
2021-07-20 21:24
采纳率: 50%
浏览 28

C#中的TCP通信断开与连接问题

在服务端向客户端发送长数据时,断开了TCP通信,恢复连接后,为什么能接着发送之前没发送完的?
断开使用的这个方法


```c#
public static void SafeClose(this Socket socket)
        {
            try
            {
                socket.Shutdown(SocketShutdown.Both);
            }
            catch (Exception exp)
            {
                //处理异常
            }
            socket.Close();
        }

然后同时关闭了监听和发送线程
启动用的这个方法
 ip = IPAddress.Parse(host);
ipe = new IPEndPoint(ip, port);
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 //绑定EndPoint对象(地址)          
 server.Bind(ipe);
//开始监听
server.Listen(0);
 t = new Thread(Listen);
 t.Start();

Listen里面包括了send如下
 byte[] bytes = Encoding.ASCII.GetBytes(res[index]);               
 //发送消息给客户端
 socket.Send(bytes, bytes.Length, 0);
 textBox1.Text = textBox1.Text+res[index]+"\r\n";
 index++;

这样的效果虽然达到了我的预期效果,但是我有点想不明白,为什么中断了,重启线程还能接着发送信息,我本以为是要自己去找中断前发送到哪个位置了,然后接着发送。希望我问题描述明白了,期待大家的帮助
  • 点赞
  • 收藏

1条回答 默认 最新

  • 砻谷踏碓 2021-07-20 21:29
    已采纳

    网络发送存在队列,服务器端发送数据给客户端时,这些待发送的数据转成二进制字节流加入待发送队列,由系统去真正执行传输工作。断开后再恢复后,这些尚未发送完成的队列自动发送出去

    点赞 打赏 评论

相关推荐 更多相似问题