Не могу общаться через сокет в Mac OS X - PullRequest
1 голос
/ 16 июля 2010

Я работаю над некоторым программным обеспечением, которое состоит из сервера и клиентов на одном компьютере, которые взаимодействуют через локальные сокеты.

Сервер (написанный на Java) открывает java.net.ServerSocket на порту 9000, и клиенты (на 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 голосов
/ 11 мая 2011

Может быть, это будет полезно для кого-то, поскольку у меня была очень похожая проблема в Mac OS с Java-клиентом, не способным открыть сокет для веб-сервера (lighttpd, обслуживающий статический файл): брандмауэр не запущен; работает в веб-браузере и с инструментами CLI (curl и wget); то же самое для разных, нестандартных, свободных портов. Отключение поддержки IPv6 для веб-сервера решило проблему.

Что именно произошло, я не знаю, но до вышеупомянутого изменения в журнале доступа веб-сервера не было записей для запросов клиентов 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.
...