Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Echo_Echo_. 2021-07-20 21:24 采纳率: 75%
浏览 335
已结题

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
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月1日
  • 已采纳回答 7月24日
  • 创建了问题 7月20日

悬赏问题

  • ¥15 Pygame坦克大战游戏开发实验报告
  • ¥15 用vmmare虚拟机用sentaurus仿真的时候,调用terminal程序,输入swb指令弹出这个,打不开workbench,桌面上面的sentaurus workbench也打不开
  • ¥75 使用winspool.drv的SetPrinter设置打印机失败
  • ¥15 simulink 硬件在环路仿真
  • ¥15 python动态规划:N根火柴摆出的最大数字
  • ¥20 (标签-excel)
  • ¥200 求idea10和MyEclipse7.1
  • ¥20 vb6.0截取当前窗体保存为jpg文件
  • ¥20 苹果手机不使用大疆sdk怎么获取遥控器控制信息或如何接入大疆sdk并且成功上架sdk
  • ¥20 woocommerce 注册按键重定向