C# Socket编程实现简单的局域网聊天器的示例代码
曹敏侑 2023-08-09C#
前言局域网聊天器是利用网络套接字(Socket)编程实现的一种简单通信工具。在本示例代码中,我们将使用C#语言来实现局域网聊天器,并实现基本的聊天功能。该示例代码将分为服务器端和客户端两部分。服务器端代
前言
局域网聊天器是利用网络套接字(Socket)编程实现的一种简单通信工具。在本示例代码中,我们将使用C#语言来实现局域网聊天器,并实现基本的聊天功能。该示例代码将分为服务器端和客户端两部分。
服务器端代码
using System; using System.Net; using System.Net.Sockets; using System.Text; class Server { private static Socket _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); private static byte[] _buffer = new byte[1024]; static void Main(string[] args) { Console.Title = "服务器"; SetupServer(); Console.ReadLine(); } private static void SetupServer() { Console.WriteLine("正在启动服务器..."); _serverSocket.Bind(new IPEndPoint(IPAddress.Any, 8080)); _serverSocket.Listen(1); _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null); Console.WriteLine("服务器已启动,等待客户端连接..."); } private static void AcceptCallback(IAsyncResult AR) { Socket socket = _serverSocket.EndAccept(AR); _buffer = new byte[1024]; socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); Console.WriteLine("客户端已连接:{0}", socket.RemoteEndPoint); _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null); } private static void ReceiveCallback(IAsyncResult AR) { Socket socket = (Socket)AR.AsyncState; int bytesRead = socket.EndReceive(AR); byte[] dataReceived = new byte[bytesRead]; Array.Copy(_buffer, dataReceived, bytesRead); string textReceived = Encoding.ASCII.GetString(dataReceived); Console.WriteLine("接收到客户端消息:{0}", textReceived); // 在此处实现你的业务逻辑,比如转发消息给其他客户端 socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); } }
客户端代码
using System; using System.Net; using System.Net.Sockets; using System.Text; class Client { private static Socket _clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); private static byte[] _buffer = new byte[1024]; static void Main(string[] args) { Console.Title = "客户端"; ConnectToServer(); RequestLoop(); Console.ReadLine(); } private static void ConnectToServer() { Console.WriteLine("正在连接服务器..."); _clientSocket.Connect(IPAddress.Loopback, 8080); Console.WriteLine("已连接到服务器"); } private static void RequestLoop() { while (true) { Console.Write("发送消息:"); string message = Console.ReadLine(); byte[] data = Encoding.ASCII.GetBytes(message); _clientSocket.Send(data); } } }
代码解释和规范
上述示例代码中,服务器端和客户端分别运行在不同的程序中。服务器端通过服务器套接字(Socket)绑定一个IP和端口,并开始监听连接请求。客户端通过客户端套接字(Socket)连接到服务器的IP和端口。
服务器端通过异步接受连接请求(AcceptCallback)函数等待客户端的请求,一旦有客户端连接,服务器就创建一个新的Socket与该客户端进行通信。然后服务器开始接收客户端发送的消息,直到客户端断开连接。
客户端通过循环不断地读取用户输入并发送给服务器。示例中使用了ASCII编码来处理文本数据,你可以根据实际需求修改编码方式。
在代码中,你可以在ReceiveCallback函数中实现自己的业务逻辑,比如将接收到的消息转发给其他客户端。
总结
通过以上示例代码,我们实现了基本的局域网聊天器,包括了服务器端和客户端的代码。用户可以根据自己的需求对代码进行修改和扩展,比如增加用户界面、加入身份验证等功能。
很赞哦! ()