2012-01-28 64 views
1

我正在嘗試使用端口2649的ServerSocket,而其他人無法連​​接。它可以與localhost正常工作。這是錯誤試圖連接當人們:Java - 無法連接ServerSocket

Exception in thread "main" java.net.ConnectException: Connection timed out: connect 
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method) 
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.<init>(Unknown Source) 
at java.net.Socket.<init>(Unknown Source) 
at Client.main(Client.java:11) 

我有端口轉發,我沒有在我的電腦上主動防火牆。以下是端口轉發時使用的設置。

http://i.imgur.com/NLdaA.png

http://i.imgur.com/FJpJQ.png

當我檢查端口2649上canyouseeme.org,它說,連接超時。

我也使用Windows XP。任何幫助表示讚賞。

感謝

編輯:這是我使用

import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStream; 
import java.io.ObjectOutputStream; 
import java.io.OutputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class Server { 

    public static void main(String[] args)throws Exception { 
     System.out.println("Starting..."); 
     File file = new File("C:/Testing.txt"); 
     InputStream in = new FileInputStream(file); 
     ServerSocket server = new ServerSocket(2649); 
     System.out.println("Ready for connection"); 
     Socket socket = server.accept(); 
     OutputStream output = socket.getOutputStream(); 
     ObjectOutputStream out = new ObjectOutputStream(output); 
     out.writeObject("C:/Testing.txt"); 
     byte[] buffer = new byte[socket.getSendBufferSize()]; 
     int bytesReceived = 0; 
     while ((bytesReceived = in.read(buffer)) > 0) { 
      output.write(buffer, 0, bytesReceived); 
     } 
     out.flush(); 
     out.close(); 
     in.close(); 
     server.close(); 
     socket.close(); 
     output.flush(); 
     output.close(); 
     System.out.println("Finished"); 
    } 

} 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.ObjectInputStream; 
import java.net.Socket; 

public class Client { 

    public static void main(String[] args) throws Exception { 
     System.out.println("Starting..."); 
     Socket socket = new Socket("IP ADDRESS", 2649); 
     InputStream input = socket.getInputStream(); 
     ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); 
     FileOutputStream out = new FileOutputStream(new File((String) in.readObject())); 
     byte[] buffer = new byte[socket.getReceiveBufferSize()]; 
     int bytesReceived = 0; 
     while ((bytesReceived = input.read(buffer)) > 0) { 
      out.write(buffer, 0, bytesReceived); 
     } 
     in.close(); 
     out.close(); 
     input.close(); 
     socket.close(); 
     System.out.println("Finished"); 
    } 
+0

你可以發佈你使用的代碼嗎? – 2012-01-28 21:06:13

+0

您的路由器,電纜/ DSL調制解調器,或兩者的設置是? – James 2012-01-28 21:08:47

+0

@James它應該是兩個。 – Stripies 2012-01-28 21:10:46

回答

2

如果不是防火牆的代碼。確保你將服務器套接字綁定到0.0.0.0而不是localhost。嘗試調用server.bind(new InetSocketAddress(「0.0.0.0」,port));

+0

它沒有幫助。 – Stripies 2012-01-28 21:19:13

+0

路由或防火牆.. – ApriOri 2012-01-28 21:21:50

+0

綁定服務器套接字。我沒有任何防火牆了。 – Stripies 2012-01-28 21:24:07

1

「連接超時」 - >防火牆丟棄數據包。最有可能的Windows防火牆 - 嘗試禁用它,看看他們是否可以連接。

+0

它已被禁用。 – Stripies 2012-01-28 21:19:33

+0

您的服務器和客戶之間是否有任何網絡設備? – 2012-01-28 22:43:43

+0

不,沒有。 – Stripies 2012-01-28 23:14:47