C#高阶-网络编程

网络基本理论

基于TCP的网络编程

基于UDP的网络编程

ISO/OSI模型简介

ISO:国际标准化组织

OSI:开放系统互联结构模型

ISO/OSI模型把网络分成了若干层,每层都实现特定的功能。

ISO/OSI模型把网络表示成竖直的线,模型中的每一层次至少包含有一个协议,所以也可以说是模型中的协议是逐个叠放的。协议栈是个由竖直的层和对方的协议抽象而来。

OSI不是一个实际的物理模型,而是一个将网络协议规范化了的逻辑参考模型

网络通讯原理:

网络通讯的沟通需要协议支持(想想为什么需要协议?):

常见的三种协议:

IP协议:网际协议(Internet Protocol)

TCP协议: 传输控制协议(Transmission Control Protocol)

UDP协议:用户数据协议(User Datagram Protocol)

Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Internet不断扩展的需要。

抛开ISO/OSI模型的7层构架,单从TCP/IP模型上的逻辑层面上看,.Net类可以视为包含3个层次:请求/响应层、应用协议层、传输层。WebReqeust和WebResponse 代表了请求/响应层,支持Http、Tcp和Udp的类组成了应用协议层,而Socket类处于传输层。可以如下图示意: 


可见,传输层位于这个结构的最底层,当其上面的应用协议层和请求/响应层不能满足应用程序的特殊需要时,就需要使用这一层进行Socket套接字编程。

在.Net中,System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现。System.Net 命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上,如TCPClient、TCPListener 和 UDPClient 类封装有关创建到 Internet 的 TCP 和 UDP 连接的详细信息;NetworkStream类则提供用于网络访问的基础数据流等,常见的许多Internet服务都可以见到Socket的踪影,如Telnet、Http、Email、Ftp等,这些服务尽管通讯协议Protocol的定义不同,但是其基础的传输都是采用的Socket。

TCP编程

认识Socket

System.Net.IPAddress:提供网际协议(IP)地址

System.Net.Sockets.TcpListener:从TCP网络客户端侦听连接

System.Net.Sockets.TcpClient:为TCP网络服务提供客户端连接

System.Net.IPEndPoint:将网络端点表示为IP地址和端口号

System.Net.NetworkStream:提供用于网络访问的基础数据流

System.Net.Sockets.Socket:实现Berkeley套接字接口

Socket原义为“插座”,socket非常类似于电话插座。

我们所见到的一切网络通讯程序基本上都基于socket来建设。

在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 

IPAddress

提供网际协议(IP)地址

主要方法:GetAddressBytes以字节数组形式提供IPAddress的副本

          IsLoopback回环地址判断

          NetworkToHostOrder将数字由网络字节顺序转换为主机字节顺序

          TryParse确定字符串是否为有效的IP地址

主要字段:Boradcase提供IP广播地址。255.255.255.255

          Loopback提供环回地址。127.0.0.1

主要属性:AddressFamily获取IP地址的地址族

TcpListener

从TCP网络客户端侦听连接

主要方法:AcceptSocket 接受挂起的连接请求

          AcceptTcpClient 接受挂起的连接请求

          BeginAcceptSocket 开始一个异步操作来接受一个传入的连接尝试

          BeginAcceptTcpClient 开始一个异步操作来接受一个传入的连接尝试

          EndAcceptSocket 异步接受传入的连接尝试,并创建新的Socket来处理远程主机通信

          EndAcceptTcpClient异步接受传入的连接尝试,并创建新的TcpClient来处理远程主机通信。

          Pending 确定是否有挂起的连接请求

          Start 开始侦听传入的连接请求

          Stop 关闭侦听器

主要属性:Active 获取一个值,用来指示TcpListener是否正主动侦听客户端连接

          ExclusiveAddressUse 用来指定TcpListener是否只允许一个基础套接字来侦听特定端口

          LocalEndpoint获取当前TcpListener的基础EndPoint

          Server获取基础网络Socket

TcpClient

为TCP网络服务提供客户端连接

主要方法:BeginConnect 开始一个对远程主机连接的异步请求

          Close 释放此TcpClient实例,而不关闭基础连接

          Connect 使用指定的主机名和端口号将客户端连接到TCP主机

          EndConnect异步接受传入的连接尝试

主要属性:Active 状态值,是否已建立连接

          Available 获取已经从网络接收且可供读取的数据量

          Client 获取或设置基础Socket

          Connected 用来指示TcpClient的基础Socket是否已连接到远程主机

          ExclusiveAddressUse 状态值,用来指定TcpClient是否只允许一个客户端使用端口

          RecevieBufferSize 获取或设置接收缓冲区的大小

          ReciveTimeOut 获取或设置在初始化一个读取操作以后,TcpClient等待接收数据的时间量

          SendBufferSize 获取或设置发送缓冲区的大小

          SendTimeOut 获取或设置TcpClient等待发送操作完成的时间量 

IPEndPoint

将网络端点表示为IP地址和端口号

主要方法:Create 从套接字地址创建终结点

主要字段:MaxPort指定可以分配给Port属性的最大值。MaxPort值设置为0x0000FFFF。

          MinPort指定可以分配给Port属性的最小值

主要属性:Address 获取或设置终结点的IP地址

          AddressFamily 获取网际协议(IP)地址簇

          Port 获取或设置终点的端口号 

NetworkStream

提供用于网络访问的基础数据流

主要方法:BeginRead 从NetworkStream开始异步读取

          BeginWrite 开始向流异步写入

          EndRead 处理异步读取的结束

          EndWrite 处理异步写入的结束

          Flush 刷新流中的数据。(保留此方法供将来使用)

          Read 从NetworkStream读取数据

          ReadByte 从流中读取一个字节,并将流内的位置推进一个字节,如果已达到末尾,则返回-1

          Write 将数据写入NetworkStream

          WriteByte 将一个字节写入流内的当前位置,并将流内的位置向前推进一个字节。

主要属性:CanRead 获取一个值,用来说明NetworkStream是否支持读取

          CanTimeout 指示超时属性是否可用于NetworkStream

          CanWrite 指示NetworkStream是否支持写入

          DataAvaiable 指示要读取的NetworkStream上是否有可用的数据

          Readable 指示NetworkStream是否可以读取

          Socket 获取基础Socket

          Writeable 指示NetworkStream是否可写

          WriteTimeOut 获取或设置写入操作阻止等待数据的时间量 

Socket

主要方法:Accept 为新建连接创建新的Socket

          AcceptAsync 开始一个异步操作来接受一个传入的连接尝试

          BeginAccept 开始一个异步操作来接受一个传入的连接尝试

          BeginConnect 开始一个远程主机连接的异步请求

          BeginDisconnect 开始异步请求从远程终结点断开连接

          BeginReceive 开始从连接的Socket中异步接收数据

          BeginReceiveFrom 开始指定网络设备中异步接收数据

          BeginReceiveMessageFrom 开始使用指定的SocketFlags将指定字节数的数据异步接收到数据缓冲区的指定位置,然后存储结点和数据包信息

          BeginSend 将数据异步发送到连接的Socket

          BeginSendFile 将文件异步发送到数据的Socket对象

          BeginSendTo 向特定远程主机异步发送数据

          Bind 使Socket与一个本地终点相关联

          Close 关闭Socket连接并释放所有关联的资源

          Connect 建立与远程主机的连接

ConnectAsync 开始一个对远程主机连接的异步请求

          Disconnect 关闭套接字连接并允许重用套接字

          DisconnectAsync 开始异步请求从远程终结点断开连接

          Dispose 释放由Socket使用的非托管资源,并可根据需要释放托管资源

          DuplicateAndClose 重复目标进程的套接字引用,并关闭此进程的套接字

          EndAccept 异步接受传入的连接尝试

          EndConnect 结束挂起的异步连接请求

          EndDisconnect 结束挂起的异步断开连接请求

          EndReceive 结束挂起的异步读取

          EndReceiveFrom 结束挂起的、从特定终点进行异步读取

          EndReceiveMessageFrom 结束挂起的、从特定结定进行异步读取。此方法还显示有关数据包而不是EndReceiveFrom的更多信息

          EndSend 结束挂起的异步发送

          EndSendFile 结束文件的挂起异步发送

          EndSendTo 结束挂起的、向指定位置进行的异步发送

GetSocketOption 返回Socket选项的值

          IOControl 为Socket设置低级别操作模式

          Listen 将Socket置于侦听状态

          Pool 确定Socket的状态

          Receive 接收来自绑定的Socket的数据

          ReceiveAsync 开始一个异步请求以便从连接的Socket对象中接收数据

          ReceiveFrom 接收数据报并存储源终结点

          ReceiveFromAsync 开始从指定网络设备中异步接收数据

          ReceiveMessageFromAsync 开始使用指定的 SocketAsyncEventArgs.SocketFlags将指定字节数的数据异步接收到数据缓冲区的指定位置,并存储结点和数据包信息

          Select 确定一个或多个套接字的状态

          Send 将数据发送到数据的Socket

          SendAsync 将数据异步发送到连接的Socket对象

          SendFile 将文件和可选数据异步发送到连接的Socket

          SendPacketsAsync 将文件集合或者内存中的数据缓冲区以异步方法发送给连接的Socket对象

SendTo 将数据发送到特定终点

          SendToAsync 向特定远程主机异点发送数据

          SetSocketOption 设置Socket选项

          Shutdown 禁用某Socket上的发送和接收

主要属性:AddressFamily获取Socket的地址族

          Available 获取已经从网络接收且可供读取的数据量

          Blocking 获取或设置一个值,该值指示Socket是否处于阻止模式

          Connected 获取一个值,指示Socket是在上次Send还是Receive操作时连接到远程主机

          DontFragment 指定Socket是否允许将Internet协议(IP)数据报分段

          EnableBroadCast 指定Socket是否可以发磅或接收广播数据包

          ExclusiveAddressUse 指定Socket是否公允许一个进程绑定到端口

          IsBound 指示Socket是否绑定到特定本地端口

          LingerState 指定Socket在尝试发送所有挂起数据时是否延迟关闭套接字

          LocalEndPoint 获取本地终结点

          MulticastLoopback 指定传出的多路广播数据包是否传递到发送应用程序

  ProtocolType 得到Socket的协议类型

          ReceiveBufferSize 指定Socket接收缓冲区的大小

          ReceiveTimeout 指定之后同步Receive调用将超时的时间长度         

          RemoteEndPoint 得到远程终结点         

          SendBufferSize 指定Socket发送缓冲区的大小

          SendTimeout 指定之后Send调用将超时的时间长度         

          SocketType 获取Socket的类型

UDP编程

主要方法:

Send:发送数据

Receive:接收数据

BeginSend:开始从连接的Socket中异步发送数据报

BeginReceive:开始从连接的Socket中异步接收数据

EndSend:结束挂起的异步发送数据报

EndReceive:结束挂起的异步接收数据报

JoinMulicastGroup:将UdpClient添加到多路广播

DropMulicastGroup:将UdpClient退出多路广播

主要属性:

Active:获取或设置一个值指示是否已建立默认远程主机

Avaiable:获取或设置缓冲中可用数据的数量

Client:获取或设置基础网络套接字

EnableBroadcast:是否接收发送广播包

ExclusiveAddressUse:是否允许一个客户端使用指定端口

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    JasonShi6306421阅读 1,226评论 0 1
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,941评论 1 13
  • iOS网络HTTP、TCP、UDP、Socket 知识总结OSI 七层模型我们一般使用的网络数据传输由下而上共有七...
    蜗牛也有梦想阅读 2,393评论 0 3
  • 网络概念第一天 两台电脑怎么通过网络传输数据?怎样才能知道传输的是数据?谁摸过网线? 看电影,怎么看的?通过电流,...
    小吖朱阅读 1,539评论 0 1
  • 网络编程的概述 网络编程的实质就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 一.OSI网络模型...
    思念挥霍阅读 370评论 0 0