• 基于TCP/IP的程序设计


    TCP特点

    (1)面向连接的传输

    (2)端到端的通信

    (3)高可靠性,确保传输数据的正确性,不会出现丢失或者乱序

    (4)全双工方式传输

    (5)采用字节流方式,以字节为单位传输字节序列

    (6)紧急数据传送功能

    通信模式

    同步与异步模式

    套接字模式

    阻塞模式:

    默认情况下套接字都是阻塞模式(阻塞函数accept()/connect()/send()/recv(),直到操作完成才会返回控制权)

    产生阻塞模式的四种情况:

    • 阻塞式读-接收缓冲区已经没有数据可读(读函数的工作是将接收缓冲区的数据复制到进程的缓冲区中)
    • 发送缓冲区空间小于要写的数据量-写函数将不进行任何复制操作(写函数将数据从用户缓冲区复制到发送缓冲区)
    • 阻塞式接收连接,调用accept()时完成队列为空
    • connect()连接时,进程至少要阻塞一个往返时间(RTT)

    解决阻塞效率问题的方法:

    • 超时控制方法-使用套接字选项设置函数或者使用定时器
    • 套接字多路复用方法-select()->select(IList read,IList write,IList error,int microseconds)

    非阻塞模式:

    有两种方法可以避免使用阻塞模式:非阻塞套接字和异步套接字

    • 非阻塞套接字(将套接字设置成非阻塞模式即可)
    • 异步套接字(指采用异步回调AsyncCallback委托)

    同步套接字编程技术:

    1.遇到线程交叉调用控制问题,调用线程之前增加:Control.CheckForIllegalCrossThreadCalls=false;

    2.收发数据的方式

    • Socket的Receive方法或者是NetworkStream类的Read方法
    • Socket的Send方法或者是NetworkStream类的Write方法-首先将发送的数据转换成字节数组,然后直接发送到TCP缓冲区(默认大小1024B),send返回整数代表发送到缓冲区的字节数,write无返回值,能够自动保证用户数据全部发送到TCP缓冲区。

    缓冲区->要发送的数据->字节流转换->发送

    异步套接字编程技术:

    异步套接字可以在监听的同时进行其他操作,具体是先使用begin方法,然后再AsyncCallback委托提供的方法中调用end方法结束操作。

    基于TcpClient类与TcpListener类的编程

    这连个类构建于Socket之上,提供了更加抽象级别的TCP服务,便于快速编写网络程序

  • 相关阅读:
    wapp HTTP Error 404. The requested resource is not found.
    JS 动态修改json字符串
    使用VS2017新建的Web项目报错:Package Microsoft.Composition 1.0.27 is not compatible with netcoreapp1.1
    java park unpark
    DOUHAO
    Thread dump
    线程状态
    https://stackoverflow.com/questions/20795295/why-jstack-out-says-thread-state-is-runnable-while-socketread
    rocketmq-flink
    the-implementation-of-epoll
  • 原文地址:https://www.cnblogs.com/janghe/p/8028201.html
Copyright © 2020-2023  润新知