基于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服务,便于快速编写网络程序

原文地址:https://www.cnblogs.com/janghe/p/8028201.html