一. 设计思路
㈠ 服务器
1) 创建主体框架:建立程序的主要界面后,系统自动生成界面的主要窗口生成代码。对于每个按钮的的代码段中,分别添加事件触发的处理代码。
2) 创建Socket实例serverSocket并绑定到用于TCP通信的本地IP地址和端口上。Bind方法完成绑定工作。绑定后用Listen方法等待客户端发出的连接尝试。
3) 创建一个线程监听客户端连接请求,用Accept方法获取客户端连接,得到客户端的socket实例。并记录在User实例中。
4) 创建一个线程处理接受的客户端数据,每接受一个客户端连接,就创建立各对应的线程循环接受该客户端发来的信息。每一个User实例对应一个clientSocket。用while来循环监听由客户端发来的信息。客户端发来的信息用Login,Logout,client等字符串分割处理不同的信息。其中client表示从客户端接受消息。
5) 本程序用BinaryReader和BinaryWriter处理字符串信息,用网络流来传输数据,使程序更有效率。
6) 利用委托来监听不同用户连接时的数目,改变其对应Label的值。
7) 当调用主线程创建的空间时,利用 InvokeRequired判断是否控件是否由主线程创建,如果是用Invoke方法完成对应操作。
㈡ 客户端
1) 创建主体框架:建立程序的主要界面后,系统自动生成界面的主要窗口生成代码。对于每个按钮的的代码段中,分别添加事件触发的处理代码。
2) 一个客户端对应一个clientSocket,用random函数创建不同的用户名。
3) 创建一个后台线程,利用while循环在时间间隔内不断尝试连接服务器,连接成功时调用改变Label的方法,实现状态的改变并显示。
4) 将网络流作为二进制读写对象,创建一个线程接收由客户端传来的信息。
5) 用字符串分割器解析不同消息。实现登录,登出,接收服务器消息的功能。
服务器连接核心代码:
serverSocket = newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
localAddress =IPAddress.Parse("127.0.0.1");
IPEndPoint serverIPE = newIPEndPoint(localAddress, 56000);
serverSocket.Bind(serverIPE);
serverSocket.Listen(10);
Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
//通过serverSocket发送数据
AddItemToListBox(string.Format("开始在{0}:{1}监听客户连接", localAddress, 56000));
//创建一个线程监听客户端连接请求
Thread myThread = newThread(ListenClientConnect);
myThread.Start();
private voidListenClientConnect()
{
Socket newClientSocket = null;
while (true)
{ <

本文详细介绍了如何使用C#实现简单的Socket通信,包括服务器和客户端的设计思路。服务器端通过创建Socket实例,监听指定端口,接受客户端连接,并创建线程处理接收的数据。客户端则创建随机用户名,尝试连接服务器,建立网络流进行数据交换。通过示例代码展示了关键步骤,如连接、监听、接收和发送信息等操作。
最低0.47元/天 解锁文章
6796

被折叠的 条评论
为什么被折叠?



