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. Java 线程类别

    Java 线程类别 守护线程和非守护线程 守护线程和非守护线程之前的唯一区别在于:是否阻止JVM的正常退出. JVM正常退出是与异常退出相对的概念,异常退出如调用System.exit(status) ...

  2. (转)mysql数据库高可用高扩展性架构方案实施

    http://shanhu.blog.51cto.com/1293405/1212605-----mysql数据库高可用高扩展性架构方案实施

  3. 【文档】七、Mysql Binlog不同事件类型的事件内容

    下面主要讲述了每个类型的事件中的固定和可变部分的数据. Start_log_event_v3/START_EVENT_V3 这个事件出现在v1或v3的binlog文件的开头部分.对于4.0和4.1版本 ...

  4. $scope作用域与依赖注入

    一.$scope与$rootscope作用域 $scope下的数据作为该控制器下的数据moduel,只有在该控制器下才能够访问:而$rootScope则可以可以再任何有效的地方访问到,这个有效的地方指 ...

  5. 四大组件之Activity Task任务栈4种启动模式

    1.启动模式 standard,创建一个新的Activity. singleTop,栈顶不是该类型的Activity,创建一个新的Activity.否则,onNewIntent. singleTask ...

  6. 内存溢出(Oom)和内存泄露(Memory leak)

    1.概念 内存溢出(Oom):1.内存不够用:2.数据长度短的数据类型存储了一个数据长度较大的数据类型:3.一个结果 内存泄露(Memory leak):1.忘记释放已用内存,内存管理较为常见的现象: ...

  7. 20.Class的继承

    1.简介 Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多 class Point { } class ColorPoint extends ...

  8. 《Algorithms算法》笔记:元素排序(1)——简单排序

    <Algorithms算法>元素排序(1)——简单排序 Algorithms算法元素排序1简单排序 排序问题 1 回调函数 2Java中回调函数的路线图 3 全序 4 Comparable ...

  9. transition过渡效果

    语法:transition: property duration timing-function delay; transition-property 规定设置过渡效果的 CSS 属性的名称.tran ...

  10. Struts2 extends用法

    1.创建一个struts-extends.xml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOC ...