Echo_Echo_. 2021-07-20 21:24 采纳率: 75%
浏览 331
已结题

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日

悬赏问题

  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆