c语言编程笔录

您现在的位置是:首页 > C语言 > C#

C#

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函数中实现自己的业务逻辑,比如将接收到的消息转发给其他客户端。

总结

通过以上示例代码,我们实现了基本的局域网聊天器,包括了服务器端和客户端的代码。用户可以根据自己的需求对代码进行修改和扩展,比如增加用户界面、加入身份验证等功能。

文章评论