Linux阻塞udp套接字无法接收
我正在 ubuntu 机器上打开 udp 阻塞套接字,它成功(没有返回错误)。
当从另一台机器向该机器和端口发送数据时,接收不会中断,并且在wireshark嗅探器中我看到Icmp错误“端口无法访问”。
我认为这可能是 iptables 问题并打开接受端口。
还有其他建议如何调试这个吗?
谢谢。
提米
I am openning a udp blocking socket on an ubuntu machine, it goes successful (no errors returned).
When sending data to that machine and port from another machine the receive doesnt breaches and in a wireshark sniffer I see and Icmp error "port unreachable".
I though it might be an iptables problem and opened the port for accept.
Any other suggestions how to debug this?
Thanks.
Timmy
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我通常使用
netcat
来确定问题是来自网络/防火墙还是来自我自己的代码,尝试使用
netcat
运行测试服务器:例如。
将打开并侦听 udp 套接字,端口 9999。
现在,您可以尝试使用“然后输入一些内容”从同一台计算机或另一台计算机发送数据包
,看看它是否到达第一台计算机。
netcat 中还有很多其他很酷的东西,请查看手册。
I usually use
netcat
to figure out if the problem comes from the network/firewall or from my own codetry running a test server with
netcat
:eg.
will open and listen an udp socket, port 9999.
Now you can try to send a packet from the same or from another computer using
Then type something and see if it reaches the first computer.
There are a lot of other cool stuffs in netcat, have a look on the manual.
您是否使用
bind()
将套接字正确绑定到本地端口?您是否记得通过 htons() 传递本地端口号以将其转换为网络字节顺序?
bind()
返回什么值?Are you using
bind()
to correctly bind the socket to the local port?Did you remember to pass the local port number through
htons()
to convert it to network byte order?What value did
bind()
return?您应该展示一个最小的测试用例。
您在 中看到您的流程吗
?它的套接字绑定到哪个本地地址(由 netstat 报告)?
You should show a minimal test case.
Do you see your process in
? What local address is its socket bound to (as reported by netstat)?
尝试这个简单的服务器,看看它是否适合您:
看看您的代码中是否包含所有必需的步骤。
Try this simple server and see if it works for you:
See if all the required steps are there in your code.