Java - TCP сокетът се свързва само в LAN

Създадох малък TCP сървър, но той се свързва само с други компютри в моята LAN. Препратих порта, но все още не работи.

метод на свързване:

    private boolean connect(){
    try {
        socket = new Socket(InetAddress.getByName(ip), port);
        System.out.println("socket created");
        dataOutput = new DataOutputStream(socket.getOutputStream());
        dataInput = new DataInputStream(socket.getInputStream());
        accepted = true;
    } catch (IOException e) {
        System.out.println("Unable to connect to the server");
        return false;
    }
    System.out.println("Successfully connected to the server.");
    return true;
}

метод на слушане:

    private void listenForServerRequest(){
    Socket socket = null;
    try{
        socket = serverSocket.accept();
        dataOutput = new DataOutputStream(socket.getOutputStream());
        dataInput = new DataInputStream(socket.getInputStream());
        accepted = true;
        System.out.println("client joined");

    }catch(IOException e){
        e.printStackTrace();
    }
}

отваряне на сървъра:

    private void initializeServer(){
    try{
        serverSocket = new ServerSocket(port,8,InetAddress.getByName(ip));
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

person yssyss    schedule 14.06.2015    source източник
comment
Можете да видите тук: javatpoint.com/socket-programming   -  person Rafiq    schedule 14.06.2015
comment
Свързани: stackoverflow.com/questions/1919990/ и stackoverflow.com/questions/9048598/   -  person Tot Zam    schedule 14.06.2015
comment
Когато получите изключение, отпечатайте изключението. Не някакво неясно послание, измислено от вас. Изхвърляте цялата полезна информация. Моля, коригирайте кода си и редактирайте полученото изключение и проследяване на стека във вашия въпрос.   -  person user207421    schedule 14.06.2015


Отговори (1)


Изглежда, сякаш предоставяте IP адрес на InetAddress.getByName(). Изисква име на хост. По-конкретно, той се нуждае от името на хоста, съответстващо на мрежата, към която е пренасочен портът. Например, ако препращате към (вътрешния) ip адрес на вашия компютър (да речем, 192.168.1.10), тогава той се нуждае от името на хоста, което съответства на този адрес (например mycomputer.local). Java се нуждае от това име на хост, за да знае какъв интерфейс трябва да слуша. Изненадан съм, че изобщо проработи.

Ако искате да предоставите IP адреса, а не името на хоста, използвайте InetAddress.getByAddress(byte[] addr) вместо това:

byte[] addr = new byte[4];
addr[0] = 192;
addr[1] = 168;
addr[2] = 1;
addr[3] = 10;
...
serverSocket = new ServerSocket(port,8,InetAddress.getByAddress(addr));
person Alvin Thompson    schedule 14.06.2015