UDP(WinSocks / C ++)の単純なサーバーとクライアントがあります。
sendto経由でデータグラムクライアント->サーバーを送信し、recvfrom関数から取得したIPとポートを使用してサーバーからクライアントに応答します。
私はそれを見出した:
- クライアントからのすべてのsendtoは異なるポートから送信されています
- サーバーから応答しようとすると、WindowsはWSAECONNRESETを返します(これは、ポートが閉じていることを意味します-http ://support.microsoft.com/kb/263823)
サーバーからクライアントに適切に応答するにはどうすればよいですか(つまり、sendtoを使用して送信するときにクライアントにポートバインディングを強制しますか?)
編集:いくつかのソースコードを追加します:
bool InitClient()
{
internal->sock = socket(PF_INET, SOCK_DGRAM, 0);
char8 yes = 1;
setsockopt(internal->sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int32));
return internal->sock != -1;
}
void Send(const IpAddress & target, const uint16 port, const char8 * data, int32 size )
{
sockaddr_in trgt;
memset(&trgt, 0, sizeof(trgt));
trgt.sin_family = AF_INET;
trgt.sin_port = htons(port);
trgt.sin_addr.s_addr = target.GetRaw();
if(sendto(internal->sock, (const char8 *)data, size, 0, (PSOCKADDR)&trgt, sizeof(trgt)) == SOCKET_ERROR)
{
LOG("Network sending error: %d", WSAGetLastError());
}
}