クライアントからのリクエストを受け取り、レスポンスを返すソケット サーバー (C++ で記述) があります。したがって、私のテスト クライアント アプリケーション (C#) は非常に単純です。
try {
UdpClient udpClient = new UdpClient(10241);
// Connect
udpClient.Connect(server_ip_address, 10240);
// prepare the packet to send
iWritableBuff wbuff = new iWritableBuff();
[ ... ]
// Send
udpClient.Send(wbuff.GetBuff(), (int)wbuff.Written());
// Receive a response
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
Console.WriteLine("We've got some data from the server!!! " + receiveBytes.Length + " bytes.");
udpClient.Close();
} catch (Exception e) {
Console.WriteLine("ERROR: " + e.ToString());
}
両方のアプリケーションを同じコンピューターで実行しています。サーバーはクライアント ポート 10241 からポート 10240 への要求を受信し、クライアント ポート 10241 に応答を返しますが、クライアントはそれを受信しません。したがって、すべてが C++ クライアントで完全に機能するため、サーバーがパケットを送り返すと確信しています。これは、C# クライアントで何か間違ったことをしているということです。何か案が?
ありがとう!
PS> Berkley Socket C# クライアントでテストするだけです:
try {
// Create socket
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
// Bind
IPEndPoint myEP = new IPEndPoint(IPAddress.Any, 0);
s.Bind(myEP);
// prepare the packet to send
iWritableBuff wbuff = new iWritableBuff();
[ ... ]
// Send it
IPEndPoint sEP = new IPEndPoint(IPAddress.Parse(server_ip_address), 10240);
int res = s.SendTo(wbuff.GetBuff(), (int)wbuff.Written(), 0, sEP);
// Receive the response
byte[] receiveBytes = new Byte[1024];
EndPoint recEP = new IPEndPoint(IPAddress.Any, 0);
res = s.ReceiveFrom(receiveBytes, ref recEP);
Console.WriteLine("We've got some data from the server!!! " + res + " bytes.");
} catch (Exception e) {
Console.WriteLine("ERROR: " + e.ToString());
}
そして、それは完璧に機能します!UdpSocket の何が問題になっていますか?