TCP 是Transmission Control Protocol(传输控制协议)的简称,是TCP/IP 体系中面向连接的运输层协议,在网络中提供全双工的和可靠的服务。一旦通信双方建立了TCP 连接,连接中的任何一方都能向对方发送数据和接收对方发送来的数据。发送数据时,程序员可以通过程序不断将数据流陆续写入TCP 的发送缓冲区中,然后TCP 自动从发送缓冲区中取出一定数量的数据,将其组成TCP 报文段逐个发送给IP 层,再通过IP 层发送出去。接收端从IP 层接收到TCP 报文段后,将其暂时保存在接收缓冲区中,这时程序员就可以通过程序依次读取接收缓冲区中的数据,从而达到相互通信的目的。

TCP 协议最主要的特点是:
1) 是一种基于连接的协议。
2) 保证数据准确到达。
3) 保证各数据到达的顺序与数据发出的顺序相同。
4) 传输的数据无消息边界。
利用TCP 协议开发应用程序时,.NET 框架提供有两种工作方式,一种是同步工作方式,另一种是异步工作方式。

  同步工作方式是指利用TCP 协议进行编程时程序执行到发送、接收和监听语句时,在未完成工作前不再继续往下执行,即处于阻塞状态,直到该语句完成某个工作后才继续执行下一条语句;异步工作方式是指程序执行到发送、接收和监听语句时,不论工作是否完成,都会继续往下执行。例如对于接收数据来说,在同步工作方式下,接收方执行到接收语句后将处于阻塞方式,只有接收到对方发来的数据后才继续执行下一条语句;而如果采用异步工作方式,则在程序执行到接收语句后,无论接收方是否接收到对方发来的数据,程序都会继续往下执行。

  与同步工作方式和异步工作方式相对应,利用Socket 类进行编程时系统也都提供有相应的方法,采用相应的方法进行编程分别称为同步套接字编程和异步套接字编程。但是使用套接字编程比较复杂,涉及到很多底层的细节。为了简化套接字编程,.NET 框架又专门提供了两个类:TcpClient 类与TcpListener 类。由于这两个类与套接字一样也分别有各自的同步和异步工作方式及其对应的方法,而我们在编程时,三个类都有可能使用,因此为简化起见,无论使用的是哪个类,我们统统从工作方式上将其称为同步TCP 和异步TCP,所以其编程方式也有两种,一种是同步TCP 编程,另一种是异步TCP 编程。

  注意这里的同步TCP 和异步TCP 仅仅指工作方式,它和线程间的同步不是一个概念。线程间的同步指不同线程或不同线程使用的某些资源具有先后关联的关系,它决定着逻辑执行的顺序。比如有A 和B 两个资源,实际应用中要求只有对资源A 处理后才能处理资源B,就说A 和B 存在同步关系。如果执行顺序不正确,变为先处理资源B 再处理资源A,得到的结果就是错误的。所以,线程间的同步主要关注的是一种逻辑关系。而同步TCP 和异步TCP 则仅仅指TCP 协议编程中采用那种工作方式而言,即是从执行到发送、接收和监听语句时,程序是否继续往下执行这个角度来说的。

  从逻辑关系上看,无论是同步TCP 应用编程还是异步TCP 应用编程,在实际应用中既可能要求不同线程间的同步,也可能不要求同步。

C# TCP应用编程一 概述的更多相关文章

  1. JAVA TCP网络编程学习笔记

    一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...

  2. Linux下TCP网络编程与基于Windows下C#socket编程间通信

    一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...

  3. paip.函数式编程方法概述以及总结

    paip.函数式编程方法概述以及总结 1     函数式编程:函数式风格..很多命令式语言里支持函数式编程风格 1.1      起源 (图灵机,Lisp机器, 神经网络计算机) 1.2      函 ...

  4. linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解

    最近要涉及对接现有应用visual c++开发的tcp客户端,花时间了解了下windows下tcp开发和linux的差别,从开发的角度而言,最大的差别是头文件(早期为了推广尽可能兼容,后面越来越扩展, ...

  5. 一种C# TCP异步编程中遇到的问题

    最近在维护公司的一个socket服务端工具,该工具主要是提供两个socket server服务,对两端连接的程序进行数据的透明转发. 程序运行期间,遇到一个问题,程序的一端是GPRS设备,众所周知,G ...

  6. 简述TCP网络编程本质

    基于事件的非阻塞网络编程是编写高性能并发网络服务程序的主流模式,头一次使用这种模式编程需要转换思维模式 .把原来的"主动调用recv()来接收数据,主动调用accept()来接受连接,主动调 ...

  7. tcp 网络编程

    网络编程同时也是进程间的一种通信:服务器进程和应用进程间的通信. OSI:开放式系统互联 OSI 7层模型:                                               ...

  8. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  9. <转>Go语言TCP Socket编程

    授权转载: Tony Bai 原文连接: https://tonybai.com/2015/11/17/tcp-programming-in-golang/ Golang的主要 设计目标之一就是面向大 ...

随机推荐

  1. Linux 中软链接和硬链接的使用

    Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link). 硬链接和软链接 硬链接 --- ln 要链接的文件 新硬链接名 软连接 --- l ...

  2. RCE - Pikachu

    概述: 远程系统命令执行 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口 比如我们常见的路由器.防火墙.入侵检测等设备的web管理界面上 一般会给用户提供一个ping操 ...

  3. os.walk() 遍历目录下的文件夹和文件

    os.walk(top, topdown=True, onerror=None, followlinks=False) top:顶级目录 os.walk()返回一个三元tupple(dirpath, ...

  4. oracle编译表上失效USERDBY脚本

    对表进行DLL操作之后,依赖这个表的一些存储过程,触发器等会失效,可以用下边的脚本进行重编译 /* Formatted on 2020/7/8 上午 09:31:31 (QP5 v5.163.1008 ...

  5. redis 主从复制(一主两从)

    一.环境基本信息 系统 centos7 版本 redis 5.0.7 只用了一台机器,ip:192.168.64.123 master端口 6379,从机 端口 6380.6381 二.redis目录 ...

  6. 入门OJ:八中生成树2

    题目描述 八中里面有N个建设物,M条边.对于这种要建最小生成树的问题,你应该很熟练了.现在老大决定降低某条边的费用,然后这条边必须要被选中,因为这条路他每天都要走,自然......问选了这条边后是否可 ...

  7. 从JAVA内存到垃圾回收,带你深入理解JVM

    摘要:学过Java的程序员对JVM应该并不陌生,如果你没有听过,没关系今天我带你走进JVM的世界.程序员为什么要学习JVM呢,其实不懂JVM也可以照样写出优质的代码,但是不懂JVM有可能别被面试官虐得 ...

  8. 无法获取 vmci 驱动程序版本: 句柄无效。 驱动程序 vmci.sys 版本不正确。请尝试重新安装 VMware Workstation。 打开模块DevicePowerOn电源失败。

    1.别打开电源,然后到虚拟机安装文件夹内.2.找到你的虚拟机系统文件中后缀为vmx的文件,右击用记事本或者Notepad++打开.2.搜索找到vmci0.present='TRUE',字段,把true ...

  9. Windows和Linux下apache-artemis-2.10.0安装配置

     window下安装配置 一.官网下载 http://activemq.apache.org/artemis/download.html 二.百度网盘下载 链接:https://pan.baidu.c ...

  10. SQL性能优化汇总

    SQL效率低下也是导致性能差的一个非常重要的原因,可以通过查看执行计划看SQL慢在哪里,一般情况,SQL效率低下原因主要有:   类别 子类 表达式或描述 原因 索引 未建索引 无 产生全表扫描 未利 ...