C++ で記述されたサーバーと C# で記述されたクライアントがあります。クライアントはそのパケットをサーバーに送信し、サーバーはそれを受信してから返送します。残念ながら、サーバーがメッセージを送り返す場合を除いて、すべてが機能します。簡単なコードは次のとおりです。
// サーバー
if ((recv_len = recvfrom(s, buf, sizeof(buf), 0, (struct sockaddr *) &si_sender, &si_senderSize)) == -1)
{
die("recvfrom()", s);
}
//print details of the client/peer and the data received
printf("Received packet from %s:%d\n", inet_ntoa(si_sender.sin_addr), ntohs(si_sender.sin_port));
std::cout << "Data: " << buf << std::endl;
//now reply the client with the same data information
if (sendto(s, buf, sizeof(buf), 0, (struct sockaddr*) &si_sender, si_senderSize) == -1)
{
die("sendto()", s);
}
//cleanup here
//クライアント
private void btnSearch_Click(object sender, EventArgs e)
{
bool found = false;
byte[] text_to_send = Encoding.ASCII.GetBytes("networkinfo");
client.Send(text_to_send, text_to_send.Length);
IPEndPoint serverResponse = new IPEndPoint(IPAddress.Any, 0);
while (!found)
{
if (client.Available > 0)
{
byte[] responseBuffer = client.Receive(ref serverResponse);
string response = Encoding.ASCII.GetString(responseBuffer);
writeIPAddress(serverResponse.Address.ToString(), serverResponse.Port.ToString());
found = true;
}
}
サーバーは sendto() 関数で失敗しませんが、ネットワーク上で受信する情報を検出していないため、クライアントの while ループは永久にポーリングしますが、sendto() 関数はエラーを返しませんでしたか?
ネットワークデータがどこにあるかについてのアイデアはありますか??