Henrybcg 2024-08-23 14:02 采纳率: 0%
浏览 8

socket通讯 多个客户端连接服务端之后如何,服务端给客户端发送信息

c# socket通讯
我多个客户端与服务端建立连接后,我用某一个客户端给服务端发送信息,在服务端我该如何判断是那个客户端发送的信息呢?
或者是有什么办法在客户端对服务端建立连接时 ,给当前客户端的标识一块传给服务端呢?

  • 写回答

1条回答 默认 最新

  • 道法自然0402 2024-09-09 10:19
    关注

    在C#中进行Socket通信时,可以通过客户端的IP地址和端口号来标识不同的客户端。当客户端与服务端建立连接后,服务端可以获取客户端的IP地址和端口号,并将其作为标识来区分不同的客户端。
    以下是一个简单的示例代码,演示了如何在服务端判断是哪个客户端发送的信息:

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    public class Server
    {
        private static byte[] buffer = new byte[1024];
        private static Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        private static int clientCount = 0;
        public static void Main(string[] args)
        {
            Console.WriteLine("Server started...");
            serverSocket.Bind(new IPEndPoint(IPAddress.Any, 8888));
            serverSocket.Listen(5);
            serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
            Console.ReadLine();
        }
        private static void AcceptCallback(IAsyncResult AR)
        {
            Socket socket = serverSocket.EndAccept(AR);
            clientCount++;
            Console.WriteLine("Client connected. Total clients: " + clientCount);
            socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket);
            serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
        }
        private static void ReceiveCallback(IAsyncResult AR)
        {
            Socket socket = (Socket)AR.AsyncState;
            int received = socket.EndReceive(AR);
            byte[] dataBuf = new byte[received];
            Array.Copy(buffer, dataBuf, received);
            string message = Encoding.ASCII.GetString(dataBuf);
            Console.WriteLine("Received from client: " + message);
            // 在这里可以根据客户端的IP地址和端口号来判断是哪个客户端发送的信息
            string clientIdentifier = socket.RemoteEndPoint.ToString();
            Console.WriteLine("Message from client " + clientIdentifier);
            socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket);
        }
    }
    
    
    评论

报告相同问题?

问题事件

  • 修改了问题 8月23日
  • 创建了问题 8月23日