在我的服務器上,我在兩個不同的端口上綁定了TCP和UDP。 我第一次連接我的客戶端與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 /端口,或者您需要調用'connect',傳遞客戶端的IP /端口,以便'send'知道要發送到哪裏。 – dbush
@dbush實際上,他想使用從tcp獲得的sockaddr,並使用它們以UDP方式向其客戶端發送消息。 例如,我接受TCP中的客戶端。我得到了他的sockaddr_in。然後我在sendto()函數中給這個sockaddr_in。 –