无法在Mac OS X上通过socket通信

1 投票
1 回答
4898 浏览
提问于 2025-04-16 01:25

我正在开发一个软件,这个软件包含一个服务器和多个客户端,它们都在同一台机器上通过本地套接字进行通信。

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

也许这对某些人会有帮助,因为我在Mac OS上遇到了类似的问题:Java客户端无法为Web服务器(lighttpd提供静态文件)打开套接字。没有防火墙在运行;在网页浏览器和命令行工具(curlwget)中都能正常工作;即使是不同的、非标准的、免费的端口也一样。禁用Web服务器的IPv6支持解决了这个问题。

具体发生了什么我不太清楚,但在做出上述更改之前,Web服务器的访问日志中没有Java客户端请求的记录。而且,

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版本。

撰写回答