- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三Socket通信实验报告
实验三Socket通信实验报告
(1)实验目的和要求
掌握VB、VC++、VS或JAVA等集成开发环境编写网络程序的方法;
掌握客户/服务器(C/S)应用的工作方式;
学习网络中进程之间通信的原理和实现方法;
理解单播、组播和广播的原理并比较其不同之处;
要求本机既是客户端又是服务器端;
(2)实验内容
所编写的程序应具有如下功能:
具有点对点通信功能,任意客户端之间能够发送消息;
具有群组通信功能,客户端能够向组内成员同时发送消息,其他组成员不能收到;
具有广播功能,客户端能够向所有其他成员广播消息;
(3)编程语言和环境
编程语言C/C++/C#/Java等均可;
编程环境Windows(MS Visual系列,VC/VB/VS.Net;)和Linux(编辑器vi+编译器GCC)均可;
(4)实验主要功能实现说明
以下为针对三个实验内容实现方法的简要说明,示例所用语言为C。
基于C的面向连接的socket编程模型
点对点通信功能
实现网络点对点通讯程序的关键步骤就是实现信息在网络中的发送和接收。数据接收使用的是Socket,数据发送使用的是NetworkStream。利用Socket来接收信息
TcpListener tlListen1 = new TcpListener ( 8889 ) ;??? //侦听端口号??? tlListen1.Start ( ) ;??? Socket skSocket = tlListen1.AcceptSocket ( ) ;??? //接受远程计算机的连接请求,并获得用以接收数据的Socket实例??? EndPoint tempRemoteEP = skSocket.RemoteEndPoint? ;??? //获得远程计算机对应的网络远程终结点??? while (? true )??? {?????? ? Byte [] byStream = new Byte[80] ;????? ?? //定义从远程计算机接收到数据存放的数据缓冲区?????? ? int i = skSocket.ReceiveFrom? ( byStream?? , ref tempRemoteEP? ) ;?????? ? //接收数据,并存放到定义的缓冲区中?????? ? string sMessage = System.Text.Encoding.UTF8.GetString ( byStream? ) ;?????? ? //以指定的编码,从缓冲区中解析出内容?????? ? MessageBox.Show ( sMessage ) ;?????? ? //显示传送来的数据? ?? }
1.2利用NetworkStream来传送信息
TcpClient tcpc = new TcpClient (? 10.138.198.213? , 8888? ) ;?? ? //对IP地址为“10.138.198.213”的计算机的8888端口提出连接申请??? NetworkStream tcpStream = tcpc.GetStream ( ) ;??? //如果连接申请建立,则获得用以传送数据的数据流
string sMsg = 您好,见到您很高兴 ;??? StreamWriter reqStreamW = new StreamWriter ( tcpStream? ) ;??? //以特定的编码往向数据流中写入数据 ,默认为UTF8编码??? reqStreamW.Write ( sMsg? ) ;??? //将字符串写入数据流中??? reqStreamW.Flush ( ) ;??? //清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流
群组通信功能
组播编程需要U有两个类支持组播网络编程Socket和UdpClient.一台计算机要加入某一个组,接收发往组的信息。Socket类要调用SetSocketOption函数加入和离开某一个组。UdpClient类有直接的加入和离开某个组的成员函数可以调用。而向某个组发信息,则没有什么特殊的,只需把发送数据的目的地址设为组播地址就可以了。发送端:
??????????? Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);??????????? IPEndPoint iep = new IPEndPoint(IPAddress.Parse(224.0.0.1), 30
文档评论(0)