簡體   English   中英

C#如何將數據發送到連接到服務器的所有客戶端?

[英]C# How do I send data to all clients connected to my server?

所以我試圖創建一個聊天應用程序,但是我是套接字的新手。 我遵循了創建服務器和客戶端的教程,但是,服務器不會將從一個客戶端發送的數據廣播到與其連接的每個客戶端。 相反,它僅將其廣播到發送數據的客戶端。

我嘗試將加入服務器的每個客戶端添加到列表中,然后使用foreach循環將從一個客戶端接收的數據發送到列表中的每個客戶端。 但是,這沒有用。 我懷疑該錯誤在foreach循環中,但我不確定。

這是我的服務器代碼:

class Program
{
    public static List<Socket> connectedClient = new List<Socket>();
    public static Socket clientSocket = default(Socket);

    static void Main(string[] args)
    {

        int port = 13000;
        string IpAddress = "127.0.0.1";

        Socket serverListener = new Socket(AddressFamily.InterNetwork, 
        SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint ep = new IPEndPoint(IPAddress.Parse(IpAddress), port);
        serverListener.Bind(ep);
        serverListener.Listen(0);
        Console.WriteLine("Server running");

        Program p = new Program();

        int counter = 0;
        while (true)
        {
            counter++;
            clientSocket = serverListener.Accept();
            connectedClient.Add(clientSocket);
            Console.WriteLine(counter + " Client joined");

            Thread clientThread = new Thread(new ThreadStart(() => 
            p.User(clientSocket)));
            clientThread.Start();
        }
    }

    public void User(Socket client)
    {
        while (true)
        {
            byte[] msg = new byte[1024];
            int size = client.Receive(msg);
            Console.WriteLine("Client>> " + 
            System.Text.Encoding.ASCII.GetString(msg, 0, size));

            //the loop that i tried to implement
            foreach(Socket clientSocket in connectedClient)
            {
                client.Send(msg, 0, size, SocketFlags.None);
            }
        }
    }
}

服務器不是將消息一次廣播給所有客戶端,而是將消息發送回給發送該消息的客戶端,但是要乘以有多少個客戶端。

例如:如果有4個客戶端連接到服務器,並且一個客戶端發送消息"Hello"則服務器將發送回"HelloHelloHelloHello"但僅發送給發送"Hello"的客戶端。

foreach(Socket clientSocket in connectedClient)
    {
        client.Send(msg, 0, size, SocketFlags.None);
    }

您正在遍歷clientSocket ,但您是在client而不是clientSocketSend 如果改為執行clientSocket.Send ,則應獲得預期的行為(例如,發送給每個客戶端而不是發送給一個客戶端4次)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM