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

基于TCP/IP的程序设计的更多相关文章

  1. 基于TCP/IP协议的C++网络编程(API函数版)

    源代码:http://download.csdn.net/detail/nuptboyzhb/4169959 基于TCP/IP协议的网络编程 定义变量——获得WINSOCK版本——加载WINSOCK库 ...

  2. JAVA Socket 底层是怎样基于TCP/IP 实现的???

    首先必须明确:TCP/IP模型中有四层结构:       应用层(Application Layer).传输层(Transport  Layer).网络层(Internet Layer  ).链路层( ...

  3. 20181225 基于TCP/IP和基于UDP/IP的套接字编程

    一.TCP/IP的套接字编程 服务器端代码: import  socket​server = socket.socket() # 默认是基于TCP# 基于TCP的对象serve=socket.sock ...

  4. 基于TCP/IP的长连接和短连接

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...

  5. 读书笔记——网络编程与开发技术(3)基于TCP/IP协议的网络编程相关知识

    TCP/IP协议:数据链路层,网络层,传输层,应用层. IP地址分为5类:A类.B类.C类.D类.E类. (A类.B类.C类是基本类,D类多用于多播传送,E类为保留类.) "*"表 ...

  6. 标准C实现基于TCP/IP协议的文件传输

    上学期集成程序设计的课堂作业,对于理解TCP/IP实现还是挺有帮助的. TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如 ...

  7. 标准C语言实现基于TCP/IP协议的文件传输

    TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如下:  1.Socket系统调用  为了进行网络I/O,服务器和客户机两 ...

  8. c#基于TCP/IP、CIP协议的欧姆龙PLC通信

    一.关于CIP协议 CIP通信是Common Industrial Protocl(CIP)的简称,它是一个点到点的面向对象协议,能够实现工业器件(传感器,执行器)之间的连接,和高等级的控制器之间的连 ...

  9. 网络通信-在浏览器输入url,基于TCP/IP协议,浏览器渲染的解释

    知识点1: 网络模型 TCP/IP四层 和ISO七层模型 (统一省略后面层字.比如传输代表传输层) 知识点2: 在应用层中TCP建立连接,经历的三次握手协议 首先:,TCP协议是什么? 为什么要三次握 ...

随机推荐

  1. The Ugly Duckling

    THE UGLY DUCKLING   Chapter 1: The Ugly Duckling Hatches   A mother duck sits on many eggs.Crack! Cr ...

  2. redux在componentDidMount中出现的问题 --- state 不变

    遇到这样一个问题: 在组件的componentDidMount中,我需要使用到redux中存储的某个状态. 但是有趣的是,当我再render中使用相同的状态时,状态会改变,但是在conponentDi ...

  3. IE8下不识别indexOf的问题

    1.为Array原型添加indexOf方法(如果学过面向对象,相当于给Array类添加实例方法),方法体如下: //添加数组IndexOf方法 if (!Array.prototype.indexOf ...

  4. ifram的使用 左边是<a>链接 右边是对应网页嵌套的显示网页链接内容 和toggle的收放用法

    1.ifram的使用 左边是<a>链接  右边是对应网页嵌套的显示网页链接内容 <div class="container"> <div class= ...

  5. Android版本信息及与Linux和Java的关系

    1.Android与Linux和Java的关系 Android严格来说,不能算是Linux,Android是一个统称,具体来说,是Google用了Linux的一个核心,用这个核心来管理进程,控制硬件. ...

  6. Maven仓库汇总

    来源:http://tianya23.blog.51cto.com/1081650/386908 1.maven 仓库地址: 共有的仓库http://repo1.maven.org/maven2/ht ...

  7. Linux 命令学习之cd

    功能说明: cd 命令是 linux 最基本的命令语句,其他的命令都会依赖与 cd 命令.因此学好 cd 命令是必须的. 语 法:cd [目的目录] 补充说明:cd指令可让用户在不同的目录间切换,需要 ...

  8. 深度学习(十六) ReLU为什么比Sigmoid效果好

    sigmoid: Relu: 为什么通常Relu比sigmoid和tanh强,有什么不同?主要是因为它们gradient特性不同. 1.sigmoid和tanh的gradient在饱和区域非常平缓,接 ...

  9. 深入理解java集合框架之---------Arraylist集合

    ArrayList简介 ArrayLIst是动态数组,用MSDN的说法就是Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小,要注意 ...

  10. Java大法之面向对象

    总觉得要写点东西,写写自己对知识的理解,对自己学的东西是否编程自己的了.我在想,如果让自己用自己的语言来解释,什么是面向对象,我可能会愣一下,我问自己什么是面向对象的时候,我想了想,自言自语说:面向对 ...