欢迎来到天天文库
浏览记录
ID:38698403
大小:102.00 KB
页数:14页
时间:2019-06-17
《实验六 即时通信系统》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验六即时通信系统1.实验目的(1)练习TcpClient和TcpListener的用法。(2)练习NetworkStream的用法。(3)练习StreamReadr和StreamWriter的用法。(4)练习线程的创建和使用方法。(5)练习解决TCP协议消息边界问题的另一种方法。2.建议用时建议用4-6小时完成本实验,或者根据自己的理解情况调整实际需要的时间。3.实验内容开发一个简单的基于TCP的即时通信系统,服务器端和客户端设计界面分别如下图所示。功能要求:(1)任何一个客户端,均可以与服务器进行
2、通信。(2)服务器要能显示客户端连接的状态,当客户端连接成功后,要自动及时告知客户端已经连接成功的信息。(3)客户端和服务器建立连接后,即可以和服务器聊天,也可以和其他任何客户聊天,用StreamReader和StreamWriter对象实现字符串的接收和发送。(4)不论客户端何时退出程序,服务器都要做出正确判断,并显示该客户连接和断开连接的情况。图1-3客户端设计界面图1-2服务器设计界面4.实验要求(1)使用强类型的List泛型列表userList保存连接的用户。(2)定义委托解决一个线程调用另一
3、个线程控件的问题。5.实验步骤提示服务器端:(1)创建一个名为SyncChatServer的Windows应用程序,将Form1.cs换名为MainForm.cs,设计界面如图1-2所示。(2)在解决方案资源管理器中,鼠标右键单击项目名,选择【添加】à【类】,添加一个类文件User.cs,用于保存与客户通信需要的信息。参考代码如下。classUser{publicTcpClientclient{get;privateset;}publicStreamReadersr{get;privateset;}p
4、ublicStreamWritersw{get;privateset;}publicUser(TcpClientclient){this.client=client;NetworkStreamnetStream=client.GetStream();sr=newStreamReader(netStream,System.Text.Encoding.UTF8);sw=newStreamWriter(netStream,System.Text.Encoding.UTF8);}publicvoidClose
5、(){sr.Close();sw.Close();client.Close();}}(3)在SyncChatServer中添加对应的代码和事件。代码如下。publicpartialclassMainForm:Form{///保存连接的所有用户privateListuserList=newList();///使用的本机IP地址IPAddresslocalAddress;///监听端口
6、summary>privateconstintport=51888;privateTcpListenermyListener;///是否正常退出所有接收线程boolisNormalExit=false;publicMainForm(){InitializeComponent();listBoxStatus.HorizontalScrollbar=true;IPAddress[]addrIP=Dns.GetHostAddresses(Dns.GetHostName(
7、));localAddress=addrIP[0];buttonStop.Enabled=false;}///【开始监听】按钮的Click事件privatevoidbuttonStart_Click(objectsender,EventArgse){myListener=newTcpListener(localAddress,port);myListener.Start();AddItemToListBox(string.Format("开始在{0}:{1}监听客
8、户连接",localAddress,port));//创建一个线程监听客户端连接请求ThreadmyThread=newThread(ListenClientConnect);myThread.Start();buttonStart.Enabled=false;buttonStop.Enabled=true;}///接收客户端连接privatevoidListenClientConnect(){while(true)
此文档下载收益归作者所有