基于TCP协议的程序的设计说明

上传人:l**** 文档编号:138128599 上传时间:2020-07-13 格式:PPT 页数:50 大小:282.50KB
返回 下载 相关 举报
基于TCP协议的程序的设计说明_第1页
第1页 / 共50页
基于TCP协议的程序的设计说明_第2页
第2页 / 共50页
基于TCP协议的程序的设计说明_第3页
第3页 / 共50页
基于TCP协议的程序的设计说明_第4页
第4页 / 共50页
基于TCP协议的程序的设计说明_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《基于TCP协议的程序的设计说明》由会员分享,可在线阅读,更多相关《基于TCP协议的程序的设计说明(50页珍藏版)》请在金锄头文库上搜索。

1、使用面向连接的套接字: 借助于从Socket实例对方法的引用,用户可以用显示的套接字执行网络操作。 1、服务器端程序设计步骤: (1)建立服务器套接字 Socket s1= newSocket(AddressFamily.InterNetWork, SocketType.Stream, ProtocolType.Tcp) (2)套接字绑定Bind( )到系统中的一个本地网络地址。 s1.Bind(IPEndPoint address) address参数必须指向一个有效的IPEndPoint实例,该实例包含一个本地IP地址和一个端口号。 IPEndPoint(IPAddress adress

2、, int port);,第3章 基于TCP协议的程序设计,(3)用Listen()方法: 等待客户机发出的连接尝试: s1.Listen(int backlog) backlog参数指出系统等待用户程序服务排队的连接数。超过等待连接数的任何客户的尝试都会被拒绝。 用户应当记住,在这里指定一个大的编号,可能会造成用户的服务器程序执行的结果,每个待解决的连接尝试都暂存在TCP缓冲器区中缓存器空间,这意味着只有较少的缓冲器空间用于发送和接收包。 至此,服务器已经做好了接收任何引进连接的准备。 (4)用Accept()方法接收连接请求 该方法返回一个新的套接字描述符,这个连接所有的通信调用都可以使用

3、该描述符。,第3章 基于TCP协议的程序设计,第3章 基于TCP协议的程序设计,服务器端代码序列: IPAddress ip = IPAddress.Parse(“127.0.0.1”); IPEndPoint ipe = new IPEndPoint(ip, 8800); Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Bind(ipe); s.Listen(0); Socket temp = s.Accept(); bytes = temp.Receive(r

4、ecvBytes, recvBytes.Length, 0); recvStr += Encoding.ASCII.GetString(recvBytes,0,bytes); string sendStr = Ok!Sucess!; byte bs = Encoding.ASCII.GetBytes(sendStr); temp.Send(bs, bs.Length, 0);,2、客户机程序设计步骤: (1)创建Socket对象 (2)用Connect连接一个IPEndPoint地址。该地址为远程服务器设备 客户机一旦与服务器建立连接,就可以使用Socket类的Send和Receive方法。当

5、通信完成之后,必须把Socket实例关闭 。 Socket socket=newSocket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); socket.Connect(IPAddress.Parse(192.168.0.53),2000); / 或 IPEndPoint iep= new IPEndPoint(IPAdress.Parse(“192.168.0.53”),2000); / socket.connect(iep); if(socket.Connected)bytesends=Encoding.U

6、nicode.GetBytes(this.textBox1.Text);socket.Send(sends);,第3章 基于TCP协议的程序设计,第3章 基于TCP协议的程序设计-Send()和Receive()方法发送接收数据,以上内容为服务器与客户端建立连接的准备工作,一旦连接好后,就可以发送和接收数据了。 发送数据和接收数据可以分别用两种方式: 使用socket提供的Send()和Receive()方法 使用NetworkStream类的Read()和Write()方法,第3章 基于TCP协议的程序设计-Send() 发送接收数据,1、发送数据:使用socket的Send()方法: Se

7、nd(byte data); 发送字节数组中指定的数据 Send(byte data,SockectFlags sf); 发送字节数组中指定的数据,并设置套接字标志。 Send(byte data,int size,SockectFlags sf); 发送字节数组中指定长度的数据,并设置套接字标志。 Send(byte data,int offset,int size,SockectFlags sf); 发送字节数组中从某处开始的指定长度的数据,并设置套接字标志。 其中,SockectFlags成员列表: DontRoute-不使用路由表发送, MaxIOVectorLength-为发送和接收

8、的wsabuf结构数据提供标准值; None-不对本次调用使用标志, OutOfBand-消息的部分发送或接收,该方式是与每一对连接资料流通讯端相关联而在逻辑上无关的传输通道。以较高的优先权而与一般资料无关的方式传输。 Partial -消息的部分发送或接收 Peek -查看传入的消息。可用的资料复制到接收缓冲区中,但不会从系统缓存中移除。,第3章 基于TCP协议的程序设计-Send() 方法发送接收数据,例: byte bytes=new byte1024; string message=“发送数据”; bytes=Encoding.Unicode.GetBytes(message); so

9、cket.Send(bytes,bytes.Length,SocketFlag.None) TCP的缓冲区为1KB,所以数据不是一次都发到缓冲区,所以Socket的Send()方法有一个整数返回值,表明实际收到的TCP缓存中的字节数。,第3章 基于TCP协议的程序设计-Send()和Receive()方法发送接收数据,2、接收数据:使用socket的Receive()方法: Receive(byte data); 接受数据到字节数组 Receive(byte data,SockectFlags sf); 接受数据到字节数组,并设置套接字标志。 Receive(byte data,int siz

10、e,SockectFlags sf); 接受指定长度的数据到字节数组,并设置套接字标志。 Receive(byte data,int offset,int size,SockectFlags sf); 接受从某处开始的指定长度的数据到字节数组,并设置套接字标志。 例: string recvStr = ; byte recvBytes = new byte1024; int bytes; bytes = c.Receive(recvBytes, recvBytes.Length, 0); recvStr += Encoding.ASCII.GetString(recvBytes, 0, byt

11、es); Console.WriteLine(recvStr);,第3章 基于TCP协议的程序设计,3、客户端发送并接收数据示例: IPAddress ip = IPAddress.Parse(“127.0.0.1”); IPEndPoint ipe = new IPEndPoint(ip, 8800); Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); c.Connect(ipe); string sendStr = hello!This is a socket te

12、st; byte bs = Encoding.ASCII.GetBytes(sendStr); c.Send(bs, bs.Length, 0); byte recvBytes = new byte1024; int bytes; bytes = c.Receive(recvBytes, recvBytes.Length, 0); string message += Encoding.ASCII.GetString(recvBytes, 0, bytes);,第3章 基于TCP协议的程序设计-write()和Read()方法发送接收数据,P11 数据流(stream),在VS平台上,有3种数据

13、流: 网络流(Network Stream): 命令空间:System.Net.Sockets 用于网络数据的读/写; 内存流(Memory Stream): 命令空间:System.IO用于内存数据的处理与转换; 文件流(File Stream): 命令空间:System.IO用于文件的读/写操作; 网络流(Network Stream)的创建: Socket socket=newSocket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); NetworkStream netstream = new Netwo

14、rkStream(socket);,第3章 基于TCP协议的程序设计-write()和Read()方法发送接收数据,1、使用NetworkStream类的Write()方法-发送数据 Write()方法的原型: Write(byte buffer,int offset,int size) 字节数组,开始字节位置,总字节数 Socket socket=newSocket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); NetworkStream netstream = new NetworkStream(socke

15、t); string welcome = Welcome; data = Encoding.Unicode.GetBytes(welcome); netstream.Write(data,0,data.Length); 与Socket的Send()方法不同, NetworkStream对象的Write()方法返回为void.因为它能保证将字节数组中数据全部发送到TCP缓存中(一次不行分多次),不需要编程者考虑TCP缓存大小比一次发送的字节数小的问题,简化了编程工作量。,第3章 基于TCP协议的程序设计-write()和Read()方法发送接收数据,2、使用NetworkStream类的read

16、()方法-接收数据 Read()方法的原型: Read(byte buffer,int offset,int size) Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); NetworkStream netstream = new NetworkStream(client); Byte message=new byte1024; netstream.Read(message,0,message.Length); Console.WriteLine(接受的内容0,Encoding.Unicode.G

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号