预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
实验三Socket通信实验报告(1)实验目的和要求掌握VB、VC++、VS或JAVA等集成开发环境编写网络程序的方法;掌握客户/服务器(C/S)应用的工作方式;学习网络中进程之间通信的原理和实现方法;理解单播、组播和广播的原理并比较其不同之处;要求本机既是客户端又是服务器端;(2)实验内容所编写的程序应具有如下功能:具有点对点通信功能,任意客户端之间能够发送消息;具有群组通信功能,客户端能够向组内成员同时发送消息,其他组成员不能收到;具有广播功能,客户端能够向所有其他成员广播消息;(3)编程语言和环境编程语言C/C++/C#/Java等均可;编程环境Windows(MSVisual系列,VC/VB/VS.Net;)和Linux(编辑器vi+编译器GCC)均可;(4)实验主要功能实现说明以下为针对三个实验内容实现方法的简要说明,示例所用语言为C。服务器端客户端socketbindlistensocketconnectacceptrecvsendrecvclosesendclose阻塞自己等待客户连接建立连接请求数据应答数据基于C的面向连接的socket编程模型点对点通信功能实现网络点对点通讯程序的关键步骤就是实现信息在网络中的发送和接收。数据接收使用的是Socket,数据发送使用的是NetworkStream。1.1利用Socket来接收信息TcpListenertlListen1=newTcpListener(8889);//侦听端口号tlListen1.Start();SocketskSocket=tlListen1.AcceptSocket();//接受远程计算机的连接请求,并获得用以接收数据的Socket实例EndPointtempRemoteEP=skSocket.RemoteEndPoint;//获得远程计算机对应的网络远程终结点while(true){Byte[]byStream=newByte[80];//定义从远程计算机接收到数据存放的数据缓冲区inti=skSocket.ReceiveFrom(byStream,reftempRemoteEP);//接收数据,并存放到定义的缓冲区中stringsMessage=System.Text.Encoding.UTF8.GetString(byStream);//以指定的编码,从缓冲区中解析出内容MessageBox.Show(sMessage);//显示传送来的数据}1.2利用NetworkStream来传送信息TcpClienttcpc=newTcpClient("10.138.198.213",8888);//对IP地址为“10.138.198.213”的计算机的8888端口提出连接申请NetworkStreamtcpStream=tcpc.GetStream();//如果连接申请建立,则获得用以传送数据的数据流stringsMsg="您好,见到您很高兴";StreamWriterreqStreamW=newStreamWriter(tcpStream);//以特定的编码往向数据流中写入数据,默认为UTF8编码reqStreamW.Write(sMsg);//将字符串写入数据流中reqStreamW.Flush();//清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流群组通信功能组播编程需要UDP,有两个类支持组播网络编程Socket和UdpClient.一台计算机要加入某一个组,然后接收发往这个组的信息。Socket类要调用SetSocketOption函数加入和离开某一个组。UdpClient类有直接的加入和离开某个组的成员函数可以调用。而向某个组发信息,则没有什么特殊的,只需把发送数据的目的地址设为组播地址就可以了。发送端:Sockets=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);IPEndPointiep=newIPEndPoint(IPAddress.Parse("224.0.0.1"),3000);EndPointep=(EndPoint)iep;byte[]b=Encoding.ASCII.GetBytes("justatest!");s.SendTo(b,ep);s.Close();接收端:Sockets=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);IPEndPointiep=newIPEndPoint(IPAddress.Any,