大家好,在上篇利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版)》博客中,所写程序只是实现简单的连接通信,基于控制台实现,运用了TCP和UDP两种传输协议。今天我和大家分享一个基于窗体的聊天程序,使用了多线程,实现的功能类似于QQ的聊天,不同的是只有一个服务器端,但可以有多个客户端与其通信,只能实现简单的文字信息交流。。。
同样,这个聊天程序也需要一个服务器端,和N个客户端来模拟实现,首先我们来搭建服务器端
首先贴上服务器端的界面图:
界面很简单,左边一个客户端在线的列表,一个显示消息的文本框和一个发送消息的文本框,为了演示简单,我把IP和Port都固定为127.0.0.1 和8888
首先我们来看看【启动服务器】按钮的代码:
1 //负责监听 客户端 连接的线程
2 Thread threadWatch = null;
3
4 //负责监听的套接字
5 Socket socketServer = null;
6
7 private void btn_StartServer_Click(object sender, EventArgs e)
8 {
9 //创建 服务器 负责监听的套接字 参数(使用IP4寻址协议,使用流式连接,使用TCP传输协议)
10 socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
11
12 //获取IP地址
13 IPAddress ip = IPAddress.Parse(tb_IP.Text.Trim());
14
15 //创建 包含IP和Port的网络节点对象
16 IPEndPoint endPoint = new IPEndPoint(ip, int.Parse(tb_Port.Text.Trim()));
17
18 //将负责监听 的套接字 绑定到 唯一的IP和端口上
19 socketServer.Bind(endPoint);
20
21 //设置监听队列 一次可以处理的最大数量
22 socketServer.Listen(10);
23
24 //创建线程 负责监听
25 threadWatch = new Thread(WatchConnection);
26 //设置为后台线程
27 threadWatch.IsBackground = true;
28 //开启线程
29 threadWatch.Start();
30
31 ShowMsg("=====================服 务 器 启 动 成 功======================");
32
33 }
2 Thread threadWatch = null;
3
4 //负责监听的套接字
5 Socket socketServer = null;
6
7 private void btn_StartServer_Click(object sender, EventArgs e)
8 {
9 //创建 服务器 负责监听的套接字 参数(使用IP4寻址协议,使用流式连接,使用TCP传输协议)
10 socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
11
12 //获取IP地址
13 IPAddress ip = IPAddress.Parse(tb_IP.Text.Trim());
14
15 //创建 包含IP和Port的网络节点对象
16 IPEndPoint endPoint = new IPEndPoint(ip, int.Parse(tb_Port.Text.Trim()));
17
18 //将负责监听 的套接字 绑定到 唯一的IP和端口上
19 socketServer.Bind(endPoint);
20
21 //设置监听队列 一次可以处理的最大数量
22 socketServer.Listen(10);
23
24 //创建线程 负责监听
25 threadWatch = new Thread(WatchConnection);
26 //设置为后台线程
27 threadWatch.IsBackground = true;
28 //开启线程
29 threadWatch.Start();
30
31 ShowMsg("=====================服 务 器 启 动 成 功======================");
32
33 }