我创建了一个TCP套接字,不需要关注要绑定的端口号[socket.sin_port = 0]。但是,如果我想打印客户端的端口号,我该怎么做?客户端C应用程序(在Linux上)创建了许多客户端,这些客户端连接到服务器。为了调试问题,我在ethereal上捕获流量。我考虑在问题出现时将端口号打印在日志中,以便在ethereal上进行过滤变得容易。
任何帮助都将不胜感激。
-Prabhu
在成功连接后,使用getsockname()调用获取套接字地址和端口。
编辑:更正方法名称。有时我无法从一个窗口复制一个简单的单词到另一个窗口!
getsockname()
。如果需要在客户端程序中以编程方式确定端口号,则应使用此选项。在服务器端(调用bind()
的一方),您将使用getpeername()
从连接的套接字获取相同的信息。man sockstat
开始。如果安装了该实用程序,则可以从任一侧运行它,并查看已分配给哪些进程的端点。与grep
结合使用,您通常可以弄清楚在Ethereal中过滤哪个地址。祝你好运!lsof -p <process id> | grep TCP