2016-12-24 51 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

相关问题