2014-11-01 114 views
0

我已經創建了兩個獨立的程序,一個客戶端和一個服務器。我試着在eclipse中測試它們,並在同一臺(Windows)機器上運行(如本地主機)上的可運行jar。它完全按照它應該的那樣工作。套接字網絡只適用於localhost

但是,當我將clinet(和後來的服務器)發送給我的一個朋友來測試它時,它不起作用。我們確保端口是開放的(即使在客戶端),但無濟於事。它沒有工作。我只會得到一個超時ConnectException。

我使用的插座是50178-50180。

我不知道該怎麼想。任何想法可能會出錯?

這是套接字代碼:

(serverside) 
serverSocket = new ServerSocket(50178); 

while (true) 
{ 
    clientSocket = serverSocket.accept(); 

    streamOut = clientSocket.getOutputStream(); 
    objectOut = new ObjectOutputStream(streamOut); 
    streamIn = clientSocket.getInputStream(); 
    objectIn = new ObjectInputStream(streamIn); 

    (stuff) 
} 

(clientside) 
Socket socket = new Socket(ipAddress, 50178); 

OutputStream streamOut = socket.getOutputStream(); 
DataOutputStream dataOut = new DataOutputStream(streamOut); 
DataInputStream dataIn = new DataInputStream(socket.getInputStream()); 

我不包括代碼的其餘部分,因爲它的I/O的東西(它確實工作,因爲它工作在本地主機)。編號: 我添加了請求的代碼。我也試過了兩臺電腦,它們在同一個網絡上(女巫本地IP 192.168.1。*)。有效。

+0

運行服務器的人是否擁有公共IP地址?客戶是否使用該地址? – Joni 2014-11-01 18:43:30

+0

是的,使用了公共IP。這是正確的。 – Karlovsky120 2014-11-01 23:12:34

回答

-1

您可能已經在這樣做了,但我相信您必須致電serverSocket.accept()。這將告訴服務器它需要等待連接。

如果你這樣做,我最好的答案是執行網絡故障排除。計算機必須能夠在局域網上看到彼此,才能夠使用IP地址。確保沒有防火牆或阻止連接的東西。

如果您可以添加客戶端嘗試連接的位置以及服務器接受連接的位置的代碼,那可能會有幫助。

+1

未調用accept()不會導致連接超時。 – EJP 2014-11-01 22:02:37