Java - 无法与 ServerSocket 连接

Posted

技术标签:

【中文标题】Java - 无法与 ServerSocket 连接【英文标题】:Java - Can't Connect With ServerSocket 【发布时间】:2012-02-21 08:17:38 【问题描述】:

我正在尝试使用 2649 端口的 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

当我在 canyouseeme.org 上检查端口 2649 时,它说连接超时。

我也在使用 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");
    

【问题讨论】:

你能贴出你正在使用的代码吗? 这些设置是在您的路由器上,还是在电缆/dsl 调制解调器上,或两者兼而有之? @HunterMcMillen 添加了代码。 您的 serversocket 正在侦听端口 2649,但您的 Socket 代码正在附加到端口 5555。 @PaulTomblin 抱歉,实际上是 2649 端口。我的朋友有客户端代码,正在运行它以尝试连接,他已将其更改为 2649。 【参考方案1】:

如果不是防火墙。确保将服务器套接字绑定到 0.0.0.0 而不是 localhost。 尝试调用 server.bind(new InetSocketAddress("0.0.0.0", port));

【讨论】:

绑定服务器套接字。我没有安装任何防火墙。【参考方案2】:

“连接超时” -> 防火墙丢弃数据包。很可能是 Windows 防火墙 - 尝试禁用它,看看他们是否可以连接。

【讨论】:

您的服务器和客户端之间是否有任何网络设备? 从客户端到服务器的“tracert”是什么样的? 我找到了问题所在。我的端口不会打开。我真的不知道为什么。我什么都试过了……太令人沮丧了。 而“打不开”究竟是什么意思? 与打开它们相反。当我使用端口检查器时,它说它们没有打开。

以上是关于Java - 无法与 ServerSocket 连接的主要内容,如果未能解决你的问题,请参考以下文章

java:ServerSocket中获取所有连接上的Socket

关于JAVA的关闭serverSOCKET

java ServerSocket

java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

客户端未接受就连接到ServerSocket-为什么? [重复]

离线时无法建立与本地主机的连接