zoukankan      html  css  js  c++  java
  • 对于.NET Socket连接的细节记录

    如果客户端直接连接一个不存在的服务器端,客户端会抛出异常:

    image

    如果在连接过程中,客户端强制关闭了连接(没有调用Close直接关闭了程序),服务器端会抛出异常:

    image

    如果在连接过程中,客户端调用了Close,服务器会抛出异常:

    image

    如果客户端继续调用已经Close的Socket连接,则会得到异常:

    image

    关于Send方法:同步调用Socket的过程中,Socket.Send方法在缓冲区没有满之前是不会阻塞的,可以用服务器端不停得发数据,客户端不调用Receive,即可很快看到这个效果。但是缓冲区满了以后,Send方法就会阻塞直到客户端使用Receive方法读取掉一些数值以后才可以继续调用。

    关于Receive方法:如果当前连接没有被关闭,并且缓冲区中有数据,则会尽可能多得读出,读出数据是缓冲区内容长度和Receive方法传入数组长度的最小值。也就是说,可能会一次读出两次传输的内容,也可能读不完一次传输的内容,需要在业务层面做很多的长度保证工作以及内容解析工作。如果缓冲区已经读完,就会block,如果这是服务器关闭了连接,客户端就会不停收到长度是0的结果,需要对这个情况作特殊处理。

  • 相关阅读:
    TCP/IP详解卷:协议 第八章简要总结
    渗透测试1
    以前的实验博客地址,以前使用csdn
    day03---Node (05)
    day03---Vue(04)
    day03---Vue(03)
    day03---ES6入门(02)
    day03---前端开发和前端开发工具(01)
    Docker实战总结
    ETL之Kettle入门
  • 原文地址:https://www.cnblogs.com/vanpan/p/3637679.html
Copyright © 2011-2022 走看看