私のサーバでは、TCPとUDPを2つの異なるポートにバインドします。 私は最初にクライアントとTCPを接続します(受け入れなど)TCPとUDPで同じsockaddr_inを使用できますか?
次に、私のサーバーとクライアントとの通信にUDPを使用したいと思います。 だから私はそのような同じsockaddr_in
を使用しようとしました:
void AUDPMonitor::sendMessage(Message &msg)
{
for (ISocket *socket: *_fdListClients)
{
if (msg.getClientId() == socket->getSock())
{
UDPSocket *UdpSocket = reinterpret_cast<UDPSocket *>(socket);
UdpSocket->send(msg, socket->getUserAddr());
break;
}
}
}
_fdListClients
私はTCPのコネクションから得たソケットのベクトルです。 エラーメッセージはありませんが、クライアントは何も受信しません。
だから私は同じsockaddr_inを使用することが可能かどうか、それが不可能かどうかを知りたいと思います。
編集:私はクライアントソケット
socklen_t client_sin_len;
sockaddr_in *client_sin = new sockaddr_in;
client_sin_len = sizeof(sockaddr_in );
std::cout << "New User ! " << std::endl;
if ((cs = accept(fd, reinterpret_cast<struct sockaddr *>(client_sin), &client_sin_len)) == -1)
私はサーバーソケットを作成するのではなく、クライアントソケットを受け入れるときです。私は自分の投稿を編集しました。 –
UDPの場合、あなたは 'accept'を呼び出しません。'sendto'を使ってリモートエンドのIP /ポートを指定するか、クライアントのIP /ポートを渡して' send'を呼び出す必要があります。そうすれば、 'send'は送信先を知ることができます。 – dbush
@dbush実際、彼はtcpから得たsockaddrを使用してUDPでクライアントにメッセージを送信したいと考えています。 たとえば、私はTCPでクライアントを受け入れます。私は彼のsockaddr_inを得た。次に、sendto()関数でこのsockaddr_inを与えます。 –