我正在编写一个程序,必须通过UDP将数据发送到特定的服务器(可以工作),并从该服务器接收数据(这不起作用)。 问题是,我发送数据的端口与来自服务器的数据来源不同。
服务器:侦听一个端口,为每个客户端创建新的套接字(在不同的端口上)以发送数据。
我有以下代码(客户端):
socker = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint epLocal = new IPEndPoint(myIp, localPort);
socket.Bind(epLocal);
IPAddress ipAddressremote = IPAddress.Parse(remoteIp);
remoteEP = new IPEndPoint(ipAddressremote, port);
socket.Connect(remoteEP);
byte[] buffer = new byte[1024];
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(MessageCallBack), buffer);
socket.Send(someByteArray);
这成功连接到我的服务器应用程序并发送它应该的数据。但是,永远不会调用MessageCallBack:
private void MessageCallBack(IAsyncResult iAsyncResult)
{
byte[] receivedData = (byte[])iAsyncResult.AsyncState;
ASCIIEncoding eEncoding = new ASCIIEncoding();
string receievedMessage = eEncoding.GetString(receivedData);
handleMessage(receievedMessage);
byte[] buffer = new byte[1024];
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(MessageCallBack), buffer);
}
我认为问题是客户端套接字仍然连接到服务器上的端口,并且只接受来自该端口的数据,但据我所知,使用BeginReceive而不是BeginReceiveFrom时这不是问题。
答案 0 :(得分:0)
使用UDP时,您无法使用Send和BeginReceive方法,因为这些方法是面向连接的(TCP)。而是使用Socket.SendTo和Socket.BeginReceiveFrom.它应该可以使用这些方法。