我正在研究一台软件,它由一台机器上的服务器和客户端组成,通过本地套接字进行通信。
服务器(用Java编写)在端口9000上打开 java.net.ServerSocket ,客户端(在Java或Python中)必须连接到localhost:9000才能进行通信。
在Windows和Linux中,这很好用。在Mac OS X(10.6,Java 1.6.0)上,即使我没有收到任何错误,也不会发生服务器和客户端之间的通信。我需要为Mac编写不同的代码,还是需要更改系统设置才能使其正常工作?
Python客户端代码段:
import socket
from re import sub
def main(server_address, port):
'''
Connect to the server.
'''
rclf = '\r\n'
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((server_address,port))
s.send("Version:1.0.0"+rclf)
答案 0 :(得分:0)
也许这对某些人有帮助,因为我在Mac OS上遇到了类似的问题,Java客户端无法打开Web服务器的套接字(lighttpd服务静态文件):没有运行防火墙;适用于Web浏览器和CLI工具(curl
和wget
);同样适用于不同的非标准自由端口。 禁用对Web服务器的IPv6支持解决了该问题。
究竟发生了什么是我所不知道的,但在上述更改之前,Web客户端请求的Web服务器的访问日志中没有条目。此外,
80/tcp open PORT
不会出现在nmap localhost
列表中,但
tcp6 0 0 localhost.PORT *.* LISTEN
出现在netstat -a
列表中。
配置: