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的结果,需要对这个情况作特殊处理。

  • 相关阅读:
    hdu 5112 A Curious Matt (水题)
    hdu 5464 Clarke and problem(dp)
    (2)线程优先级、线程安全
    (1)进程与线程
    并发与并行
    (5) 守护线程与线程阻塞
    java线程中断2
    sleep()和wait()的区别
    java线程中断
    java创建线程的三种方式及其对比
  • 原文地址:https://www.cnblogs.com/vanpan/p/3637679.html
Copyright © 2011-2022 走看看