0

我目前正在使用此功能将数据从服务器发送到客户端

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();
}
4

2 回答 2

2

1)您应该实现某种协议,以便您的服务器有一个“众所周知的”端口来接受连接。使用此端口通知您的客户端客户端必须连接的另一个端口。为每个客户端使用不同的端口。

您的客户端在 11000 处连接到服务器。您的服务器为客户端分配了一个唯一端口,假设第一个客户端为 11001。然后服务器在11001打开一个连接,客户端在11000关闭连接,在11001打开一个新连接接收数据。

2)为什么是UDP?

于 2012-09-14T09:52:41.657 回答
0

我不明白为什么你需要打开一个新的套接字。从他们发送给您的第一个数据包中,您已经拥有每个客户的地址和端口。只需将数据包发送到该地址:端口。我也绝对没有得到设置额外端口的其他建议。

于 2012-09-17T22:33:03.503 回答