2012-02-16 5 views
2

У меня есть написанная простая пара Client-Server, отправляющая объект на сервер. Я проверил код, и он работает, если я использую LOCALHOST в качестве имени сервера.Неверная конфигурация IP-сервера клиентского сервера в Java

При попытке подключения к серверу с использованием моего собственного IP-адреса клиент постоянно отключается. Я не могу не думать, что я пропустил трюк, если кто-то может взглянуть на код, я был бы очень благодарен. Большое спасибо, J.

клиент

ObjectOutputStream oos = null; 
    ObjectInputStream ois = null; 
    Socket socket = null; 
    Person p = null; 

    try { 
    // My IP address entered here.. 
    socket = new Socket("xx.xx.xxx.xxx", 3000); 
    // open I/O streams for objects 
    oos = new ObjectOutputStream(socket.getOutputStream()); 
    ois = new ObjectInputStream(socket.getInputStream()); 


    /* 
    // read an object from the server 
    p = (Person) ois.readObject(); 
    System.out.print("Name is: " + p.getName()); 
    oos.close(); 
    ois.close();*/ 

    //write object to the server 
    // p = new Person("HAL"); 
    oos.writeObject(new Person("HAL")); 
    oos.flush(); 
    ois.close(); 
    oos.close(); 

    } catch(Exception e) { 
    System.out.println(e.getMessage()); 
    } 

Сервер

public Server() throws Exception { 
server = new ServerSocket(3000); 
System.out.println("Server listening on port 3000."); 
this.start(); 

}

ответ

2

Вам необходимо либо сделать привязку сервера 0.0.0.0 (группового символа, все интерфейсы на вашей машине) или конкретный IP-адрес, который вы хотите прослушать. ServerSocket конструктор вы используете только принимает номер порта, который связывается с localhost, который собирается принять решение о 127.0.0.1

server = new ServerSocket(3000, 5, InetAddress.getByName("0.0.0.0")); 

Редактировать добавить: второй является В параметре накопившихся размер. Это количество подключений, которые могут быть поставлены в очередь, ожидая вас до accept(), прежде чем дополнительные попытки подключения приведут к «отказу подключения».

+0

Привет, Брайан, спасибо за ответ, он помог мне понять процесс. Однако при использовании вышеуказанного конструктора сервера соединение все еще синхронизируется. Я даже пытался установить InetAddress на свой IP-адрес, но дал мне Bind Exception при компиляции. – Jnanathan

+0

Вы делаете это на своем домашнем компьютере, который находится за маршрутизатором? Вышеприведенный код отлично работает на моей машине. Если вы можете опубликовать трассировку стека, я могу помочь. –

+0

Да. Я отключил брандмауэр на машине, над которой я работаю. Это довольно странно, я пробовал около 12 раз с момента последнего ответа. И он работал только один раз. – Jnanathan

Смежные вопросы