我目前正在使用此功能将数据从服务器发送到客户端
private static void send_message(string ip, string message)
{
byte[] packetData = System.Text.UTF8Encoding.UTF8.GetBytes(message);
int port = 11000;
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ip), port);
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
client.SendTo(packetData, ep);
}
但这意味着目标IP /端口只能打开一个客户端来接收数据,因为打开两个客户端意味着一个客户端可以检索另一个客户端的数据(如果我是正确的话)。我能解决这个问题吗?
接收功能:
private static Int32 port = 11000;
private static UdpClient udpClient = new UdpClient(port);
public static void receive_threaded()
{
Thread t = new Thread(() =>
{
while (true)
{
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, port);
byte[] content = udpClient.Receive(ref remoteIPEndPoint);
if (content.Length > 0)
{
string message = Encoding.UTF8.GetString(content);
parseMessage(message);
}
}
});
t.Start();
}
答案 0 :(得分:2)
1)您应该实现某种协议,以便您的服务器具有“众所周知”的端口来接受连接。使用此端口通知客户端客户端必须连接的另一端口。为每个客户端使用不同的端口。
您的客户端在11000处连接到服务器。您的服务器为客户端分配一个唯一的端口,假设为第一个客户端提供11001。然后服务器在11001打开连接。客户端在11000关闭连接并在11001打开新连接以接收数据。
2)为什么选择UDP?
答案 1 :(得分:0)
我不明白为什么你需要打开一个新的套接字。您已经从他们发送给您的第一个数据包中获得了每个客户端的地址和端口。只需将数据包发送到该地址:port。我绝对没有得到建立额外端口的其他建议。