0

我正在测试一个简单的客户端/服务器应用程序。我在客户端的单元测试需要服务器启动,但我似乎遇到了挂起(单个测试有效,但不超过一个)。

作为我的 tearDown() 的一部分,我认为关闭服务器套接字会很好,但是......因为我无法从客户端代码访问服务器对象,所以我不能做一个简单的事情: serverSocket.close()。也就是说,我确实知道套接字正在运行的端口号,仅使用端口号,是否可以关闭套接字,而不管使用它的对象在哪里/如何驻留?

对不起,这可能是一个微不足道的问题......谢谢......

我想另一个相关的问题是......我可以根据已经使用的端口号创建一个套接字吗?

4

2 回答 2

0

如果套接字在您的进程中,您可以做的是遍历从 0 到的所有文件描述符getrlimit(RLIMIT_NOFILE)并调用getsockname()它们中的每一个。如果调用成功并且端口号匹配,则您已经通过端口号找到了您的套接字(但请注意,可能是具有相同端口号但绑定到不同地址的多个套接字)。

于 2013-03-28T15:11:48.930 回答
0

不可以。您需要获取服务器软件才能关闭端口。

唯一的另一种选择是终止服务器:您可以使用 lsof 或 netstat 识别端口打开的进程,然后终止该进程。不过,这是一种释放端口的残酷方式。在你的情况下,你最好修复你的软件不要挂起!

于 2013-03-28T14:25:16.490 回答