- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验六 即时通信系统
实验六 即时通信系统
1.实验目的
(1)练习TcpClient和TcpListener的用法。
(2)练习NetworkStream的用法。
(3)练习StreamReadr和StreamWriter的用法。
(4)练习线程的创建和使用方法。
(5)练习解决TCP协议消息边界问题的另一种方法。
2.建议用时
建议用4-6小时完成本实验,或者根据自己的理解情况调整实际需要的时间。
3.实验内容
开发一个简单的基于TCP的即时通信系统,服务器端和客户端设计界面分别如下图所示。
功能要求:
(1)任何一个客户端,均可以与服务器进行通信。
(2)服务器要能显示客户端连接的状态,当客户端连接成功后,要自动及时告知客户端已经连接成功的信息。
(3)客户端和服务器建立连接后,即可以和服务器聊天,也可以和其他任何客户聊天,用StreamReader和StreamWriter对象实现字符串的接收和发送。
(4)不论客户端何时退出程序,服务器都要做出正确判断,并显示该客户连接和断开连接的情况。
4.实验要求
(1)使用强类型的List泛型列表userList保存连接的用户。
(2)定义委托解决一个线程调用另一个线程控件的问题。
5.实验步骤提示
服务器端:
(1)创建一个名为SyncChatServer的Windows应用程序,将Form1.cs换名为MainForm.cs,设计界面如图1-2所示。
(2)在解决方案资源管理器中,鼠标右键单击项目名,选择【添加】(【类】,添加一个类文件User.cs,用于保存与客户通信需要的信息。参考代码如下。
class User
{
public TcpClient client{ get; private set; }
public StreamReader sr{ get; private set; }
public StreamWriter sw { get; private set; }
public User(TcpClient client)
{
this.client = client;
NetworkStream netStream = client.GetStream();
sr = new StreamReader(netStream, System.Text.Encoding.UTF8);
sw = new StreamWriter(netStream, System.Text.Encoding.UTF8);
}
public void Close()
{
sr.Close();
sw.Close();
client.Close();
}
}
(3)在SyncChatServer中添加对应的代码和事件。代码如下。
public partial class MainForm : Form
{
/// summary保存连接的所有用户/summary
private ListUser userList = new ListUser();
/// summary使用的本机IP地址/summary
IPAddress localAddress;
/// summary监听端口/summary
private const int port = 51888;
private TcpListener myListener;
/// summary是否正常退出所有接收线程/summary
bool isNormalExit = false;
public MainForm()
{
InitializeComponent();
listBoxStatus.HorizontalScrollbar = true;
IPAddress[] addrIP = Dns.GetHostAddresses(Dns.GetHostName());
localAddress = addrIP[0];
buttonStop.Enabled = false;
}
/// summary【开始监听】按钮的Click事件/summary
private void buttonStart_Click(object sender, EventArgs e)
{
myListener = new TcpListener(loc
文档评论(0)