2010-07-16 35 views
1

我正在使用一臺由通過本地套接字進行通信的計算機上的服務器和客戶端組成的軟件。無法通過在Mac OS X上的套接字進行通信

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

你確定服務器實際綁定到端口9000嗎?例如,xdebug也希望使用端口9000.如果使用不同的端口,它會工作嗎? – 2010-07-16 20:14:22

+0

這是完整的代碼示例嗎?主要方法在這裏沒有被調用。 – McJeff 2010-07-16 20:10:11

+0

這只是程序內容的一部分,這個問題應該是一個評論,而不是一個答案。 – erjiang 2010-07-17 15:16:57

回答

0

也許這將是別人有幫助的,因爲我有非常類似的問題在Mac OS與不能夠打開插座Web服務器的Java客戶端(lighttpd的服務靜態文件) :沒有運行防火牆;在Web瀏覽器和CLI工具中工作(curlwget);對於不同的非標準免費端口也是如此。 禁用IPv6支持Web服務器解決了該問題。

究竟發生了什麼超出了我的知識範圍,但在上述更改之前,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版本。
相關問題