Java TCP套接字编程:无法连接到远程主机

时间:2014-08-11 18:06:37

标签: java sockets tcp

我有一个java程序,它接受来自Web浏览器的http请求,作为响应,程序发送文本文件内容以在Web浏览器中显示。当我从安装在运行java代码的同一台机器上安装的浏览器发出请求时,程序工作正常,但是当我从其他一些网络浏览器发出请求时,这个浏览器不在运行java代码的同一台机器上,程序没有得到任何要求。

这是我通过网络浏览器发出请求的方式: -

http://localhost:port_number/   
This is working fine...

这是我从我的机器上没有的其他网络浏览器发出请求的方式:

http://my_ip_address:port_number/
This is not working...

这是我的java代码: -

while (true) {
        ServerSocket serverSocket = null;
        Socket clientSocket = null;
        try {
            serverSocket = new ServerSocket(32768);
            clientSocket = serverSocket.accept();
            InetAddress ia = clientSocket.getInetAddress();
            jTextArea1.append("Connected to : " + ia + "\n");
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            String inputLine, outputLine;
            String s = (String) JOptionPane.showInputDialog(this, "Enter File Name : ");
            File f = new File(s);
            if (f.exists()) {
                out.println("http/1.1 200 ok\r");
                out.println("Mime version 1.1");
                out.println("Content-Type: text/html\r");
                out.println("Content-Length: " + f.length() + "\r");
                out.println("\r");
                BufferedReader d = new BufferedReader(new FileReader(s));
                String line = " ", a;
                while ((a = d.readLine()) != null) {
                    line = line + a;
                }
                out.write(line);
                out.flush();
                jTextArea1.append("File Delivered.\n");
                d.close();
            }
            out.close();
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            jTextArea1.append("Accept failed.");
            System.exit(1);
        }
    }

2 个答案:

答案 0 :(得分:0)

这与您编写的代码无关。您需要公开访问您的IP地址。 Here's是一个相关的主题。

答案 1 :(得分:-1)

  1. 检查您是否确实在收听0.0.0.0:32768而不是127.0.0.1:32768或任何其他特定IP(特别是如果您连接到多个网络)。启动一个shell并在Windows上使用netstat -ano,在Unix或Mac上使用netstat -anp。
  2. 检查您的防火墙是否允许远程连接到端口32768