2014-11-30 3 views
0

Я работаю над чат-клиентом, и я создал регистрационную Jframe, где пользователь регистрируется. , при регистрации он должен подключиться к серверу, чтобы сервер мог проверить, существует ли идентификатор пользователя или нет. Когда я создаю новый сокет, он продолжает давать мне ошибку.Ошибка IOException при создании сокета в java

код для создания сокета:

try 
    { 
     String serverIP; 
     int Port = 5000; 
     Socket socks; 
     serverIP = String.valueOf(InetAddress.getLocalHost()); 
     socks = new Socket(serverIP, Port);   
     InputStreamReader streamreader = new InputStreamReader(socks.getInputStream());   
     reader = new BufferedReader(streamreader);   
     writer = new PrintWriter(socks.getOutputStream());   
     writer.println(inputUsername + ":"+inputPassword+":"+inputConfirmPassword+":Register");    
     writer.flush(); // flushes the buffer 

    } 
    catch(IOException io) 
    { 
     System.err.println(io.getMessage()+"---connection error 1"); 
    } 
    catch(SecurityException se) 
    { 
     System.err.println(se.getMessage()+"---connection error 2"); 
    } 
    catch(IllegalArgumentException ae) 
    { 
     System.err.println(ae.getMessage()+"---connection error 3"); 
    } 
    catch(NullPointerException ne) 
    { 
     System.err.println(ne.getMessage()+"---connection error 4"); 
    } 

, когда я исполняю, я получаю следующее сообщение об ошибке:

ошибка/172.16.3.24 --- подключение Dell 1

это генерируемый оператором catch IOException.

Может ли кто-нибудь сказать мне, почему это происходит, а также как его исправить?

спасибо большое.

ответ

1

определение IOException от Javadoc

Signals that an I/O exception of some sort has occurred. This class is the general class of exceptions produced by failed or interrupted I/O operations.

В то время как у меня нет доступа к полной StackTrace, заявление Dell/127.16.3.24 позвольте мне поверить, что это IP-адрес, который был дан при создании сокета.

Я думаю, вы можете попробовать использовать InetAddress.getLocalHost().getHostAddress, который вернет только IP, а InetAddress.getLocalHost() также вернет имя хоста системы.

InetAddress.getLocalHost от Javadoc

Returns the address of the local host. This is achieved by retrieving the name of the host from the system, then resolving that name into an InetAddress.

Обратите внимание, что если вы уже знаете, что вы хотите локальный IP хоста, вы можете просто передать «127.0.0.1» при создании сокета и он также должен зафиксировать проблема.

Вы должны также рассмотреть возможность добавления инструкции flush в блок finally, чтобы убедиться, что поток сбрасывается, даже если происходит исключение. И обязательно добавьте в этот блок также оператор close.

+0

Это решило мою проблему. необходимо добавить getHostAddress. –

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