Visual C#TCP协议编程

Visual C#TCP协议编程

  1. Visual C# TCP协议编程基础
    1. TCP协议层次结构
    2. TCP协议规范
  2. TCP协议相关类简介
    1. TcpListener
    2. TcpClient
    3. NetworkStream

Visual C# TCP协议编程基础

TCP协议层次结构

OSI七层模型:在计算机网络产生之初,每个计算机厂商都有一套自己的网络体系结构的概念,它们之间互不相容。由于不同的局域网有不同的网络协议,不同的传输介质也各有其电气性能,为了使不同的网络能够互连,必须建立统一的网络互连协议。为此,ISO(国际标准化组织)提出了网络互连协议的基本框架,称为开放系统互连(OSI)参考模型,只要遵循OSI标准,一个系统可以和位于世界上任何地方的、也遵循OSI标准的其他任何系统进行连接.现在此模型已成为计算机间和网络间进行通信的主要结构模型。目前使用的大多数网络通信协议的结构都是基于 OSI 模型的。

OSI将通信过程定义为七层,即将连网计算机间传输信息的任务划分为七个更小、更易于处理的任务组。每一个任务或任务组则被分配到各个 OSI 层。每一层都是独立存在的,因此分配到各层的任务能够独立地执行。这样使得变更其中某层提供的方案时不影响其他层。OSI参考模型分为7层,分别是物理层(Physical Layer),数据链路层(Data Link Layer),网络层(Network Layer),传输层(Transport Layer),会话层(Session Layer),表示层(Presentation Layer)和应用层(Application Layer)。

TCP/IP模型:ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。如下图所示,是TCP/IP参考模型和OSI参考模型的对比示意图。

TCP/IP协议栈是美国国防部高级研究计划局计算机网(Advanced Research Projects Agency Network,ARPANET)和其后继因特网使用的参考模型。TCP/IP参考模型分为四个层次:应用层、传输层、网络互连层和主机到网络层。如下图所示。

TCP协议相关类的简介

在TCP协议编程中,经常使用的类有TcpListener类,TcpClient类,NetworkStream类。

TcpListener类:

TcpListener 类从 TCP 网络客户端侦听连接。TcpListener 类提供一些简单方法,用于在阻塞同步模式下侦听和接受传入连接请求。可使用TcpClient 或 Socket 来连接 TcpListener。可使用 IPEndPoint、本地 IP 地址及端口号或者仅使用端口号,来创建 TcpListener。可以将本地 IP 地址指定为 Any,将本地端口号指定为 0(如果希望基础服务提供程序为您分配这些值)。如果选择这样做,可使用 LocalEndpoint 来标识已指定的信息。

Start 方法用来开始侦听传入的连接请求。Start 将对传入连接进行排队,直至您调用 Stop 方法或它已经完成 MaxConnections 排队为止。可使用AcceptSocket 或 AcceptTcpClient 从传入连接请求队列提取连接。这两种方法将阻塞。如果要避免阻塞,可首先使用 Pending 方法来确定队列中是否有可用的连接请求。调用 Stop 方法来关闭 TcpListener

注意:Stop 方法不会关闭任何已接受的连接。需要用户负责分别关闭这些连接

公共属性TcpListener 构造函数
受 .NET Framework 精简版的支持。
初始化 TcpListener 类的新实例。
公共属性Start
受 .NET Framework 精简版的支持。
开始侦听传入的连接请求。
公共属性AcceptSocket
受 .NET Framework 精简版的支持。
接受挂起的连接请求。
公共属性AcceptTcpClient
受 .NET Framework 精简版的支持。
接受挂起的连接请求。
公共属性Stop
受 .NET Framework 精简版的支持。
关闭侦听器。

TcpClient类:

为 TCP 网络服务提供客户端连接。TcpClient 类提供了一些简单的方法,用于在同步阻塞模式下通过网络来连接、发送和接收流数据。

为使 TcpClient 连接并交换数据,使用 TCP ProtocolType 创建的 TcpListener 或 Socket 必须侦听是否有传入的连接请求。可以使用下面两种方法之一连接到该侦听器:

  • 创建一个 TcpClient,并调用三个可用的 Connect 方法之一。
  • 使用远程主机的主机名和端口号创建 TcpClient。此构造函数将自动尝试一个连接。
公共构造函数
公共构造函数TcpClient 构造函数
受 .NET Framework 精简版的支持。
已重载。初始化 TcpClient 类的新实例。
公共属性
公共属性LingerState
受 .NET Framework 精简版的支持。
获取或设置有关套接字逗留时间的信息。
公共属性NoDelay
受 .NET Framework 精简版的支持。
获取或设置一个值,该值在发送或接收缓冲区未满时禁用延迟。
公共属性ReceiveBufferSize
受 .NET Framework 精简版的支持。
获取或设置接收缓冲区的大小。
公共属性ReceiveTimeout 获取或设置在初始化一个读取操作以后 TcpClient 等待接收数据的时间量。
公共属性SendBufferSize
受 .NET Framework 精简版的支持。
获取或设置发送缓冲区的大小。
公共属性SendTimeout 获取或设置 TcpClient 等待发送操作成功完成的时间量。
公共方法
公共方法Close
受 .NET Framework 精简版的支持。
关闭 TCP 连接并释放与 TcpClient 关联的所有资源。
公共方法Connect
受 .NET Framework 精简版的支持。
已重载。使用指定的主机名和端口号将客户端连接到 TCP 主机。
公共方法GetStream
受 .NET Framework 精简版的支持。
返回用于发送和接收数据的 NetworkStream

NetworkStream类:

提供用于网络访问的基础数据流。  NetworkStream 类提供在阻塞模式下通过  Stream 套接字发送和接收数据的方法。您可以使用  NetworkStream 类进行同步和异步数据传输。要创建  NetworkStream,必须提供连接的  Socket。也可指定  NetworkStream 对所提供的  Socket 具有哪些  FileAccess 权限。默认情况下,关闭  NetworkStream并不会关闭所提供的  Socket。如果要使  NetworkStream 拥有关闭所提供的  Socket 的权限,则必须将  ownsSocket 构造函数参数的值指定为  true

将 Write 和 Read 方法用于简单的单线程同步阻塞 I/O。若要使用不同的线程来处理 I/O,则请考虑使用 BeginWriteEndWrite 和 BeginReadEndRead 方法进行通信。

NetworkStream 不支持对网络数据流的随机访问。CanSeek 属性用于指示流是否支持查找,它的值始终为 false。读取 Position 属性、读取 Length 属性或者调用 Seek 方法都会引发 NotSupportedException

公共构造函数
公共构造函数NetworkStream 构造函数
受 .NET Framework 精简版的支持。
已重载。创建 NetworkStream 类的新实例。
公共属性
公共属性CanRead
受 .NET Framework 精简版的支持。
已重写。获取一个值,该值指示 NetworkStream 是否支持读取。
公共属性CanSeek
受 .NET Framework 精简版的支持。
已重写。获取一个值,该值指示流是否支持查找。该属性总是返回 false
公共属性CanWrite
受 .NET Framework 精简版的支持。
已重写。获取一个值,该值指示 NetworkStream 是否支持写入。
公共属性DataAvailable
受 .NET Framework 精简版的支持。
获取一个值,该值指示在要读取的 NetworkStream 上是否有可用的数据。
公共属性Length
受 .NET Framework 精简版的支持。
已重写。获取流上可用数据的长度。此属性始终引发 NotSupportedException
公共属性Position
受 .NET Framework 精简版的支持。
已重写。获取或设置流中的当前位置。此属性始终引发 NotSupportedException
公共方法
公共方法BeginRead
受 .NET Framework 精简版的支持。
已重写。从 NetworkStream 开始异步读取。
公共方法BeginWrite
受 .NET Framework 精简版的支持。
已重写。开始向流异步写入。
公共方法Close
受 .NET Framework 精简版的支持。
已重写。关闭 NetworkStream
公共方法EndRead
受 .NET Framework 精简版的支持。
已重写。处理异步读取的结束。
公共方法EndWrite
受 .NET Framework 精简版的支持。
已重写。处理异步写入的结束。
公共方法Flush
受 .NET Framework 精简版的支持。
已重写。刷新流中的数据。保留此方法供将来使用。
公共方法Read
受 .NET Framework 精简版的支持。
已重写。从 NetworkStream 读取数据。
公共方法ReadByte(从 Stream 继承) 
受 .NET Framework 精简版的支持。
从流中读取一个字节,并将流内的位置向前推进一个字节,或者如果已到达流的末尾,则返回 -1。
公共方法Seek
受 .NET Framework 精简版的支持。
已重写。将流的当前位置设置为给定值。此方法始终引发 NotSupportedException
公共方法Write
受 .NET Framework 精简版的支持。
已重写。将数据写入 NetworkStream
公共方法WriteByte(从 Stream 继承) 
受 .NET Framework 精简版的支持。
将一个字节写入流内的当前位置,并将流内的位置向前推进一个字节。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值