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】如何查看命令来源于哪个包

    Debian:(Ubuntu等) 先安装apt-file sudo apt-get install -y apt-file apt-file update 查询命令:(已查询ifconfig为例) r ...

  2. 【Oracle】生成随机数

    Oracle生成随机数: dbms_random.string(opt, 6)     --括号里的opt要从下面的列表中选择,数字代表要生成几位随机数,如果是1位的话,就改成1 以此类推 opt可取 ...

  3. CTFshow-萌新赛杂项_劝退警告

    下载附件 https://www.lanzous.com/i9wocah 下载后得到一个劝退警告.zip 解压得到一张gif图片 使用binwalk分析发现包含zip 于是拿到了一个压缩包 打开后发现 ...

  4. SQL Server management studio使用sa连接时报错与伺服器的连接已成功,但在登入程序是发生错误

    使用Sql Server management studio的sa用户连接数据库时,报如下错误 解决方法: 1.使用windows验证登录 2.右键点击连接,点击属性,点击安全性,选择混合验证 3.重 ...

  5. 深度解读设备的“万能语言”HarmonyOS的分布式软总线能力

    摘要:本文分享鸿蒙分布式软总线,并对相关源代码进行解析,为在鸿蒙系统平台上工作的相关人员的信息参考和指导. 总线是一种内部结构,在计算机系统中,主机的各个部件通过总线相连,外部设备通过相应的接口电路再 ...

  6. postgres模糊匹配大杀器

    ArteryBase-模糊匹配大杀器 问题背景 随着pg越来越强大,abase目前已经升级到5.0(postgresql10.4),目前abase5.0继承了全文检索插件(zhparser),使用全文 ...

  7. java 日期与时间操作

    我们先来了解一下基本的概念 日期 2020-11-21 2020-11-22 时间 15:36:43 2020-11-21 15:36:43 时区 北京时间 2020-11-21 15:36:43 东 ...

  8. mysql半同步复制跟无损半同步区别

    mysql半同步复制跟无损半同步复制的区别: 无损复制其实就是对semi sync增加了rpl_semi_sync_master_wait_point参数,来控制半同步模式下主库在返回给会话事务成功之 ...

  9. Dapper原来还可以直接这样写SQL,很强大哦

    网络上对Dapper的解释是这样的: Dapper是一个简单的.NET对象映射器,在速度方面具有"King of Micro ORM"的头衔,几乎与使用原始的ADO.NET数据读取 ...

  10. Netty编解码器(理论部分)

    背景知识 在了解Netty编解码之前,先回顾一下JAVA的编解码: 编码(Encode):在java中称之为序列化,把内存中易丢失的数据结构或对象状态转换成另一种可存储(存储到磁盘),可在网络间传输的 ...