![](/img/trans.png)
[英]How to send file to all the clients connected to the server in C# using NetworksApi.TCP.SERVER
[英]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
而不是clientSocket
上Send
。 如果改為執行clientSocket.Send
,則應獲得預期的行為(例如,發送給每個客戶端而不是發送給一個客戶端4次)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.