udp 客户端与服务器通信问题,主要实现在线人数及时推送给各个在线使用的用户,内网里面使用无任何问题,到外网客户端接受不到服务器发送的udp协议,我主要实现思路是,先通过客户端连接到服务器端(客户端发送连接请求时,如果使用的是内网ip地址,经过nat运算会转换成外网地址(问题就出在这里)),服务器端接受到客户端的连接然后 myClientSocket.RemoteEndPoint把客户端的ip地址保存,以便推送在线人数。问题来了,服务器端接收到的ip地址(服务器端接收的都是外网ip),然后根据ip地址循环发送个在线用户,但是客户端要接收不了服务器端发送的udp协议的数据。客户端udpclientSocket.Bind(PublicSource.lo.clientSocket.LocalEndPoint)的是本地的ip地址(本地ip地址,如果是内网用户就接受不到服务端发送的信息)。具体代码如下服务端[C#] 纯文本查看 复制代码 foreach (KeyValuePair<IPEndPoint, string> cs in server.ClientSockets)
{
server.udpSocket.SendTo(Encoding.ASCII.GetBytes(string.Format("e*{0}*ol*{1}#", myClientSocket.RemoteEndPoint, server.ClientSockets.Count)), cs.Key);
}
客户端
[C#] 纯文本查看 复制代码 if (udpclientSocket.IsBound)
{
udpclientSocket.Close();
udpclientSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
}
udpclientSocket.Bind(PublicSource.lo.clientSocket.LocalEndPoint);//
connectThread = new Thread(ListenClient);
connectThread.Start();
|