我创建一个TCP套接字,而不必担心要绑定到[socket.sin_port = 0]的端口号。但是后来如果我想打印客户端的端口号怎么办呢?客户端C应用程序(在Linux上)创建了许多连接到服务器的客户端。为了调试问题,我捕获了ethereal上的流量。我想到了在出现问题的同时在日志中打印端口号,以便过滤ethereal变得容易。
任何帮助都将不胜感激。
-Prabhu
答案 0 :(得分:10)
成功连接后,使用getsockname()调用获取套接字地址和端口。
编辑:正确的方法名称。有时我无法将一个简单的单词从一个窗口复制到另一个窗口!
答案 1 :(得分:2)
我相信达隆意味着getsockname()
。如果您需要以编程方式确定客户端(侧面调用connect()
)的端口号,则可以使用此选项。在服务器端(呼叫bind()
的一方),您将使用getpeername()
从连接的套接字获取相同的信息。
但是,如果您正在调试并且无法更改代码,那么您最终会使用netstat或sockstat实用程序等操作系统,具体取决于操作系统。我不确定Linux(甚至你的特定软件包)下可用的实用程序是什么,但我会从man sockstat
开始。如果已安装,则可以从任一侧运行它,并查看已将哪些端点分配给哪些进程。将其与grep
结合使用,您通常可以确定在Ethereal中过滤哪个地址。祝你好运!
答案 2 :(得分:0)
lsof -p <process id> | grep TCP