【问题标题】:Java - Socket Programming / Blocked portsJava - 套接字编程/阻塞端口
【发布时间】:2013-10-02 14:06:49
【问题描述】:

我正在尝试做一个简单的客户端示例,该客户端使用 8080 端口连接到任何网站并打印来自服务器的第一个输入。但我什至无法连接到服务器。 用 Wireshark 跟踪 TCP 的标头,我意识到服务器没有响应。 我已经关闭了防火墙、防病毒软件并在路由器中设置了转发端口,但仍然无法连接到服务器。

这是我的代码:

import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;


public class ProtocoloX {
    //private byte[] bytes = new byte[1024];
    private byte[] bytes = new byte[]{(byte) 0xC6, 0x57, 0x54, (byte) 0x95, 0x5E, (byte) 0x9E, 0x6B, (byte) 0xC6, 0x55, 0x17, 0x55,0x52, (byte) 0x9E, 0x21};
    private Socket cliente;
    private final String HOST = "stackoverflow.com";
    private final int PORT = 8080;

    public boolean connect(){
        this.cliente = new Socket();
        System.out.println("-- Trying to connect: "+HOST+":"+PORT);
        InetSocketAddress socketAddress = new InetSocketAddress(HOST, PORT); 
        try {
            this.cliente.connect(socketAddress, 10000000);
        } catch (IOException e) {
            System.out.println(e);
            System.out.println("-- CONNECTION PROBLEM ");
            return false;
        }
        System.out.println("-- Connection successful");
        return true;
    }

    private void receive(){
        InputStream stream = null;  
        System.out.println("-- Reading data...");
        try {
            stream = this.cliente.getInputStream();
            try {
                int count = stream.read(this.bytes);
                System.out.println("count:"+count);
                System.out.println("bytes:"+this.bytes);
            } catch (IOException e) {
                System.out.println("-- DATA READING PROBLEM");
                e.printStackTrace();
            }
        } catch (IOException e) {
            System.out.println("-- DATA READING PROBLEM");
            e.printStackTrace();
        }
        System.out.println("-- Data read successful");
    }


    public static void main(String[] args) throws UnknownHostException, IOException {
        ProtocoloX protocolo = new ProtocoloX();
        if(protocolo.connect()){
            protocolo.receive();
        }

    }
}

什么可能导致问题? 谢谢:D

【问题讨论】:

  • stackoverflow.com 没有监听 8080 端口
  • HTTP 端口是端口 80。8080 是备用 HTTP 端口
  • 好的,现在它对 stackoverflow.com 有效,但是当我尝试任何其他网站时,它会抛出一个读取超时异常。会是什么?

标签: java sockets port


【解决方案1】:

许多 WAN 网站不会响应明确指定的端口查询。例如,在网络浏览器中访问http://www.stackoverflow.com:8080 也不会得到响应。验证您要连接的服务器将接受 8080 端口上的连接。

【讨论】:

  • 好的,现在它对 stackoverflow.com 有效,但是当我尝试任何其他网站时,它会抛出一个读取超时异常。会是什么?
  • 我现在用的是80,而不是8080端口
  • 如果您告诉我您具体尝试连接哪台服务器会有所帮助。连接失败的原因有很多,显然 StackOverflow 并不是您真正想要连接的,那么您最终打算连接到哪台服务器?它甚至是一个公共网站吗?
【解决方案2】:

您不会在端口 8080 上得到任何东西,而是尝试使用“80”。 80 是 Internet 网站侦听请求的默认 http 端口。

【讨论】:

  • 好的,现在它对 stackoverflow.com 有效,但是当我尝试任何其他网站时,它会抛出一个读取超时异常。会是什么?
  • @PauloRicardoXavierGiusti 你打开了一个原始套接字。在从服务器读取任何内容之前,您需要发送一个 http GET 请求。由于您尚未向服务器发送任何请求并尝试读取响应,因此您收到超时异常。如果您想要一个允许发送 http 请求的高级 API,请查看 apache commons http library
猜你喜欢
  • 2021-03-03
  • 2017-04-18
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 2010-10-31
  • 2013-10-15
相关资源
最近更新 更多