【发布时间】:2023-03-20 01:30:01
【问题描述】:
我目前正在 RedHat 上运行一个应用程序,这会导致一些问题。 我有两台计算机都运行 RedHat 并使用 UDP 套接字进行通信。
双方都正确创建了Socket,并且客户端正确绑定了服务器。当客户端发送消息时,我可以看到在服务器端使用 TCPDump 正确接收了消息,但从未调用套接字上的函数 Receive() 并且应用程序什么也不做。
当我在 localhost 上执行此操作时,应用程序运行良好。
有人知道问题出在哪里吗?
【问题讨论】:
-
如果函数
Receive()从未被调用,为什么你会惊讶于没有收到消息? -
好吧,我很惊讶,因为服务器(使用 tcpdump)以正确的端口号很好地接收了数据包,但没有任何反应。它应该正常进入Receive函数而不是什么都不做,希望你明白我的意思
-
你在说什么
Receive()函数?它会是您尚未发布的代码中的那个吗?是通过您尚未披露的一连串事件达成的? -
对不起,我说的是 recv() 函数 (man7.org/linux/man-pages/man2/recv.2.html)。我对此很陌生,所以我可能会忘记一些事情。我还要补充一点,这个应用程序可以在 32 位的 opensuse 操作系统上完美运行,但现在它不能在 red hat 64 位上运行
-
我怀疑你的逻辑有问题导致
recv,或者你的服务器上有防火墙,它丢弃了数据包。
标签: c++ sockets udp client-server redhat