无法通过Mac OS X上的套接字进行通信

时间:2010-07-16 19:15:24

标签: java python macos networking sockets

我正在研究一台软件,它由一台机器上的服务器和客户端组成,通过本地套接字进行通信。

服务器(用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)

1 个答案:

答案 0 :(得分:0)

也许这对某些人有帮助,因为我在Mac OS上遇到了类似的问题,Java客户端无法打开Web服务器的套接字(lighttpd服务静态文件):没有运行防火墙;适用于Web浏览器和CLI工具(curlwget);同样适用于不同的非标准自由端口。 禁用对Web服务器的IPv6支持解决了该问题。

究竟发生了什么是我所不知道的,但在上述更改之前,Web客户端请求的Web服务器的访问日志中没有条目。此外,

80/tcp    open  PORT

不会出现在nmap localhost列表中,但

tcp6       0      0  localhost.PORT         *.*                    LISTEN

出现在netstat -a列表中。

配置:

  • Mac OS:10.6,
  • Java:1.6.0_24,尝试了x86和amd64版本。