第一次消息后 socket 连接被拒绝

3 投票
1 回答
1721 浏览
提问于 2025-04-17 23:16

我通过套接字(sockets)让Python和Matlab进行通信。不过在那之前,我想先用netcat测试一下套接字。所以我用命令 nc -lkp 25771 建立了一个服务器,然后写了一个Python客户端来给这个服务器发送消息:

import socket
host = 'localhost'
port = 25771
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send('Hello there')
s.close()

运行 python client.py 后,服务器打印出了“Hello there”;但是当我再试着运行客户端脚本一次时,它就报错了。

错误追踪(最近的调用在最前面): 文件 "client.py",第 13 行,在 s.connect((host,port)) 文件 "/usr/lib/python2.7/socket.py",第 224 行,在 meth return getattr(self._sock,name)(*args) socket.error: [Errno 111] 连接被拒绝

为什么同样的命令第二次会报错呢?第一次命令后发生了什么变化?

1 个回答

0

你现在使用的是传统版本的netcat(netcat-traditional),这个版本不支持-k这个选项。你可以通过在终端输入man nc来查看你的netcat的手册,确认一下。

要安装netcat-openbsd版本,可以使用以下命令:

sudo apt-get install netcat-openbsd

安装完成后,切换到netcat-openbsd版本,使用以下命令:

sudo update-alternatives --config nc

然后选择netcat-openbsd。

现在你可以使用命令nc -lk 25771,这样就可以在25771端口上监听多个连接了。

你还可以使用这里讨论的命令:Netcat: 使用nc -l port_number而不是nc -l -p port_number

撰写回答