UDP(WinSocks/C++)でシンプルなサーバとクライアントを使用しています。sendtoで送信するときにUDPでクライアントを強制的にオープンする方法
私はsendto経由でデータグラムのクライアント - >サーバを送り、recvfrom機能から得られたipとポートを使ってサーバからクライアントに応答します。
私がいることが分かった:サーバーのWindowsから返信しようとすると、WSAECONNRESET(ポートが閉じていることを意味 - http://support.microsoft.com/kb/263823)を返した場合、クライアントからのすべてのsendtoが
サーバからクライアントに正しく応答するにはどうすればいいですか?(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());
}
}
[この回答](http://stackoverflow.com/a/4487043/377270)があなたを助けてくれますか? – sarnold
どのポートにバインドする必要がありますか? – PiotrK
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740148%28v=vs.85%29.aspx < - "注:ソケットがオープンされている場合、setsockopt呼び出しが行われ、 sendto呼び出しが行われると、Windows Socketsは暗黙のバインド関数呼び出しを実行します。そして、これは: http://cboard.cprogramming.com/networking-device-communication/71964-udp-client-needs-bind.html – PiotrK