网络与通信程序设计:15 运输层_第1页
网络与通信程序设计:15 运输层_第2页
网络与通信程序设计:15 运输层_第3页
网络与通信程序设计:15 运输层_第4页
网络与通信程序设计:15 运输层_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十五章 运输层与Socket网络编程TCP/IP协议层次结构15.1 TCP/UDP与Socket概述运输层(传输层)包括TCP和UDP两种通信协议以不同的方式实现两台主机应用程序间数据的端到端传输Transmission Control Protocol,传输控制协议,提供面向连接的、可靠的数据传输服务,保证了端到端数据传输的可靠性User Datagram Protocol,用户数据报协议,提供无连接的、不可靠的数据传输方式,没有流量控制和确认机制。只提供校验和数据完整性检查的差错控制,是一种尽力而为的数据传输方式套接字(Socket):网络计算机与应用进程间通信的抽象协议信源机IP地址

2、 : 信源应用进程端口信宿机IP地址 : 信宿应用进程端口.Net 对Socket编程的支持System.Net.Sockets 命名空间/zh-cn/library/sb27wehh(v=vs.80).aspxSocket类ProtocolTypeTCP: Listen、BeginConnect 和 EndConnect、BeginAccept 和 EndAccept、BeginSend 和 EndSend、BeginReceive 和 EndReceiveUDP: BeginSendTo 和 EndSendTo、BeginReceiveFrom 和 EndReceiveFromShutdo

3、wn ,禁用 Socket;Close ,释放 Socket 资源TcpClient类:为TCP网络服务提供了客户连接TcpListener类:用于监听TCP客户连接UdpClient类:用于提供UDP网络服务NetworkStream类:为网络访问提供了基础数据流常用基础类IPAddress类IP地址类,存储IP地址Address获取或设置一个IP地址Parse()将IP地址字符串转换为IP地址实例IPEndPoint类以IP地址和端口号的形式代表一个网络终端Address、Port:获取或设置IP地址和端口号DNS类静态类,获取IP地址和主机名、WWW域名的对应关系返回IPHostEntr

4、y: GetHostByAddress()、GetHostByName()、GetHostEntry()、Resolve()IPHostEntry类地址信息类,一般为Dns类的辅助类AddressList获取或设置主机的IP地址(IPAddress数组)HostName获取或设置主机的DNS名地址类编程实例using System.Net;string strHostName;/获取本地计算机名称strHostName = Dns.GetHostName();/由本地计算机名称获取本机IP地址IPHostEntry ipEntry = Dns.GetHostEntry(strHostName)

5、;IPAddress addr = ipEntry.AddressList; /显示本机IP地址for (int i = 0; i addr.Length; i+) /IP地址:addri.ToString(); /地址类型:addri.AddressFamily.ToString();Socket类(主要属性)Available获取已经从网络接收且可供读取的数据量Connected查询Socket是否已连接到远程主机LocalEndPoint获取本地终结点EndPointRemoteEndPoint获取远程终结点EndPointProtocolType获取Socket的协议类型Tcp、Udp

6、、Icmp、RawSocketType获取Socket的类型Stream、Dgram、RawSocket类(主要方法)Bind(EndPoint address)Listen(int con_num)Accept()Send()Receive()Connect(EndPoint remoteEP)Shutdown(SocketShutdown how)Close()Socket类编程实例using System.Net;using System.Net.Sockets;/创建IPEndPoint实例IPAddress ipa = IPAddress.Parse();IPEndPoint ipe

7、p = new IPEndPoint(ipa,8080);/创建Socket实例Socket test_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);/修改Socket实例的属性test_socket.Blocking = false;/调用Bind()方法,使Socket与一个本地终结点相关联test_socket.Bind(ipep);IPEndPoint sock_iep = (IPEndPoint)test_socket.LocalEndPoint;/关闭Sock

8、ettest_socket.Close();15.2 TCP编程TCP的主要特点向应用进程提供面向连接的服务提供全双工数据传输服务提供面向字节流的服务端到端传输,不支持广播和多播主要的类和方法TcpClient类TcpListener类NetworkStream类TcpListener类的主要属性与方法TcpListener类在Socket上构建,提供更高抽象的TCP服务属性及方法描述LocalEndpoint 获取当前TcpListener的基础IPEndPoint实例,此对象包含关于本地网络接口的IP地址和端口号信息Active指明TcpListener是否正在侦听连接请求(受保护方法)S

9、erver 获取基础网络Socket实例AcceptSocket()接受挂起的连接请求,并返回一个Socket实例用来与客户进行通信 AcceptTcpClient() 接受挂起的连接请求,并返回一个TcpClient实例用来与客户进行通信BeginAcceptSocket() 开始一个异步操作来接受一个传入的连接尝试BeginAcceptTcpClient() 开始一个异步操作来接受一个传入的连接尝试 EndAcceptSocket()异步接受传入的连接尝试,并创建新的Socket来处理远程主机通信EndAcceptTcpClient() 异步接受传入的连接尝试,并创建新的TcpClient

10、来处理远程主机通信 Pending() 确定是否有挂起的连接请求Start() 开始侦听客户端的连接请求 Stop() 关闭侦听器TcpClient类的主要属性与方法TcpClient类为TCP服务提供客户端连接,在Socket上构建属性及方法描述Available 获取网络接收缓冲区中可供读取的数据量Client 获取或设置基础SocketConnected 标识TcpClient的基础Socket是否已连接到远程主机NoDelay 指定在发送或接收缓冲区未满时,套接字是否将延迟发送或接收数据ReceiveBufferSize 获取或设置接收缓冲区的大小ReceiveTimeout 获取或设

11、置在初始化一个读取操作以后 TcpClient 等待接收数据的时间量SendBufferSize 获取或设置发送缓冲区的大小SendTimeout 获取或设置 TcpClient 等待发送操作成功完成的时间量BeginConnect() 开始一个对远程主机连接的异步请求Close() 释放TcpClient 实例,而不关闭基础连接Connect() 依据指定的主机名和端口号连接到TCP主机EndConnect() 异步接受传入的连接尝试 GetStream() 返回用于发送和接收数据的NetworkStream实例 NetworkStream的使用TcpClient使用标准的Stream流处理

12、技术通过使用NetworkStream实例的读写操作来实现数据接收和发送NetworkStream不支持查找和对数据流的随机访问编程实例rs = new StreamReader(m_client.GetStream();/获取接收数据的网络流实例ws = m_client.GetStream(); /获取发送数据的网络流实例m_returnData = rs.ReadLine(); /接收网络数据ws.Write(data, 0, data.Length); /向网络发送数据简单的TCP通信(分析)Accept/侦听并接收IPAddress localadd = IPAddress.Pars

13、e(“”);/将IP地址字符串转为IP地址实例TcpListener listener = new TcpListener(localadd, 520);/实例化并开始侦听listener.Start(); /开始监听TcpClient client = listener.AcceptTcpClient(); /接受一个新的TCP请求NetworkStream ns = client.GetStream();/获取发送数据的网络流实例byte data = new byteclient.ReceiveBufferSize; int numbytesread = ns.Read(data, 0,

14、 client.ReceiveBufferSize);tbDataRes.Text = Encoding.UTF8.GetString(data, 0, numbytesread);client.Close();listener.Stop();/发送TcpClient client = new TcpClient();client.Connect(, 520);NetworkStream ns = client.GetStream();byte data = Encoding.UTF8.GetBytes(strtosend);ns.Write(data, 0, data.Length);cli

15、ent.Close();简单的TCP通信(例程)设计基于TCP的多用户聊天工具(协议)应答OKERR|错误原因|聊天命令指令及数据描述CONN|发送者用户名| 连接服务器,注册用户名JOIN|新加入的用户名|服务器通知各客户端有新成员加入LIST|客户端请求当前用户列表LIST|用户1|用户2|用户3|服务器发送当前用户列表CHAT|发送内容|客户端向服务器发送聊天内容PRIV|接受者用户名|发送的内容|客户端向服务器发送私聊内容CHAT|发送者用户名|发送内容|服务器向客户端转发聊天内容QUIT|客户端请求退出EXIT|要离开的用户名|服务器端通知各客户端有成员离开服务器协议解释流程公共变量

16、命名的TCP客户端列表 (可用Hashtable)用户名列表(可用客户端列表遍历实现)服务与各客户端的通信内容主要线程UI主线程,维护服务器界面侦听线程,处理连接请求每个请求的独立处理线程其它配合线程客户端协议解释流程主要线程及方法UI主线程数据发送方法(在UI线程或者独立线程)数据接收及处理线程其它配合线程任务15-1:基于TCP的多用户聊天软件协议要求如上述要求实现客户端与老师的服务器通信,并接受服务器数据可自行设计服务器,实现完整的聊天软件15.3 UDP编程UDP特点UDP不需要建立连接,可以向网络中的任何主机发送UDP数据包UDP没有缓冲机制和窗口机制接收数据时,要保证字节数组足够大

17、可以利用UDP实现广播和组播.NET对UDP的支持:UdpClient类UdpClient类是基于Socket类的较高级别抽象UdpClient类属性及方法描述Available 获取从网络接收的可读取的数据量Client 获取或设置基础网络SocketDontFragment 获取或设置指定UdpClient实例是否允许对IP协议数据报进行分段的标志EnableBroadcast 获取或设置指定UdpClient实例是否可以发送或接收广播数据包的标志ExclusiveAddressUse 获取或设置指定UdpClient是否只允许一个客户端使用端口的标志MulticastLoopback 获

18、取或设置是否将输出多播数据包传递给发送应用程序的标志Ttl 获取或设置指定由UdpClient发送的IP协议数据包的生存时间TTL的值BeginReceive() 从远程主机异步接收数据报 BeginSend() 将数据报异步发送到远程主机 Close() 关闭UDP连接 Connect() 指定发送数据的默认远程主机DropMulticastGroup() 退出多播组 EndReceive() 结束挂起的异步接收 EndSend() 结束挂起的异步发送 JoinMulticastGroup() 将当前的UdpClient实例添加到多播组 Receive() 接收已由远程主机发送的UDP数据报

19、,同时返回远程主机信息 Send() 将UDP数据报发送到远程主机 单播(Unicast)与多播(Multicast)单播(Unicast)指网络中从源向目的地转发单播流量的过程。单播流量地址唯一,只有一个发送方和一个接收方。多播/组播(Multicast)允许一个或多个发送者(多播源)将单一的数据包同时发送到多个接收者的网络技术单播编程发送端UdpClient server = new UdpClient();/可指定发送端口/指定接收地址及端口/IPEndPoint ipb =new IPEndPoint(IPAddress.Parse(“3”),520);server.Send(byte

20、s, bytes.Length,“3”,520);接收端UdpClient client = new UdpClient(520);IPEndPoint myhost = null;byte bytes = client.Receive(ref myhost);广播(Broadcast)网络广播指一个节点同时向相同域中的其它所有节点传输数据包的过程。广播消息地址包括:本地广播、全球广播IP: 掩码:本地广播地址:55全球广播地址:55广播编程实例发送端UdpClient server = new UdpClient();/指定广播地址及端口IPEndPoint ipb =new IPEndPo

21、int(IPAddress.Parse(“55”),521);server.Send(bytes, bytes.Length, ipb);接收端UdpClient client = new UdpClient(521);IPEndPoint myhost = null;byte bytes = client.Receive(ref myhost);多播/组播 概述一个多播组由若干个主机构成,当某源主机要将数据发送给某个多播组上的所有主机时,首先需要构造一个能够标识该多播组的IP数据报,然后以尽力而为方式转发给对应多播组中的各个主机。为了标识多播组,在TCP/IP中引入了IP多播地址,每个多播组

22、都需要一个IP多播地址来标识。 类别地址范围描述局部链接地址55用于局域网,路由器不转发属于此范围的IP包预留多播地址55用于全球范围或网络协议管理权限地址55组织内部使用,用于限制多播范围多播编程实例发送端UdpClient server = new UdpClient();/指定组播地址及端口IPEndPoint ipb =new IPEndPoint(IPAddress.Parse(“00”),521);server.Send(bytes, bytes.Length, ipb);接收端UdpClient client = new UdpClient(521);client.JoinMulticastGroup(IPAddress.Parse(“00”), 16);IPEndPoint myhost = null;byte bytes = client.Receive(ref myhost);退出组client.DropMulticastGroup(IPAddress.Parse(00); 任务15-2:优化聊天软件使用UDP协议优化之前设计的聊天软件服务器端将其中的部分信息用UPD广播或者组播实现为聊天软件加入多用户语音或者视频聊天功能15.4 P2P编程技术P2P,Peer-to-Peer,对等互联或点对点技术P2P技术实现的每台计算机既是客户端也是服务器,其功

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论