2016-12-24 79 views
3

我想有爲什麼我的網絡TCP/UDP實現不起作用?

  • 可以發送和接收TCP消息的服務器。

  • 可以發送和接收UDP消息。

多個客戶端

  • 可以發送和接收TCP消息
  • 可以發送和接收UDP消息。

我使用基本套接字和select爲我的服務器和網絡SFML模塊爲客戶端(http://www.sfml-dev.org/tutorials/2.4/network-socket.php)。

在服務器端創建我的插座,TCP和UDP端口4005

綁定在客戶端我用的是connect(host, ip)呼籲TCP,和我的UDP端口綁定到4006,我的UDP端口已經綁定到服務器端的4005。

目前,我的TCP工作正常,我可以在雙方(客戶端和服務器)發送一個接收消息。

我想從服務器發送UDP數據包到客戶端。爲此,我正在從我接受的客戶端套接字sockaddr_in發送一條消息(sockaddr_in由accept函數填充)。

但是,當我發送它,我的客戶端不會收到它。

我把這種方式:

unsigned int UDPSocket::send(Message &buffer, sockaddr_in const &addr) 
{ 
    sockaddr_in cpy; 

    std::memcpy(&cpy, &addr, sizeof(sockaddr_in)); 
    //return ::send(_sock, buffer.getData().data(), buffer.getData().size(), 0); 
    std::cout << "sending to " << buffer.getClientId() << std::endl; 
    int fromsize = sizeof(sockaddr_in); 
    cpy.sin_port = htons(4005 +1); 
    std::cout << "sending to " << 4005 + 1 << std::endl; 
    int ret = ::sendto(_sock, buffer.getMessage(), buffer.getSize(), 0, (struct sockaddr *) &cpy, fromsize); 
    perror("sendto"); 
    std::cout << ret << std::endl; 
    return ret; 
} 

RET優於0和perror返回成功,所以應該將消息sended。

我收到這樣說:

bool    Network::updateQueueUDP() 
{ 
    unsigned char data[sizeof(Protocol::rtypePacket)]; 
    bool   ret = false; 
    std::size_t  received; 
    sf::IpAddress sender; 
    unsigned short senderPort; 

    if (_udpSocket.receive(data, sizeof(data), received, sender, senderPort) == sf::Socket::Done) 
    { 
    Message *msg = new Message(); 
    msg->setMessage(data, received, 0); 
    _udpQueue.push(msg); 
    std::cout << "pushing" << std::endl; 
    ret = true; 
    } 
    return ret; 
} 

receive永遠不會返回sf::Socket::Done

你有一個想法,爲什麼我沒有在我的客戶的UDP得到了什麼?

+0

我在哪裏可以找到'_udpSocket.receive'的代碼或規範?我懷疑你只是不明白它是如何工作的,它可能不是用於從UDP接收的正確函數,或者'sf :: Socket :: Done'可能不是正確的返回值來檢查。 – Omnifarious

+0

@Omnifarious在此頁面上http://www.sfml-dev.org/tutorials/2.4/network-socket.php –

+0

嗯,嗯......你得到什麼樣的回報值? – Omnifarious

回答

0

我給sendto函數寫錯了文件描述符,所以它是正常的它不會發送。

+2

好吧,考慮到你向我們展示的代碼,我們永遠都不會想到這一點。 : - / – Omnifarious

相關問題