在java中创建套接字时出现IOException错误

时间:2014-11-30 15:54:55

标签: java sockets

我正在聊天客户端,我创建了一个注册Jframe,用户可以注册。 注册时,应该连接到服务器,以便服务器可以检查用户ID是否已经存在。 当我创建一个新套接字时,它一直给我一个错误。

套接字创建的代码是:

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");
    }

执行时,我收到以下错误:

Dell / 172.16.3.24 ---连接错误1

这是由IOException catch语句生成的。

有谁能告诉我为什么会这样,以及如何纠正它?

非常感谢。

1 个答案:

答案 0 :(得分:1)

来自javadoc的IOException定义

  

表示发生了某种I / O异常。此类是由失败或中断的I / O操作产生的一般异常类。

虽然我无法访问您的完整堆栈跟踪,但语句Dell/127.16.3.24让我相信这是创建套接字时给出的IP地址。

我想你可能想尝试使用InetAddress.getLocalHost().getHostAddress,它只返回IP,而InetAddress.getLocalHost()也会返回系统的主机名。

来自javadoc的

InetAddress.getLocalHost

  

返回本地主机的地址。这是通过检索来实现的   系统中主机的名称,然后将该名称解析为   的InetAddress。

请注意,如果你已经知道你想要本地主机ip,你可以在创建套接字时简单地传递“127.0.0.1”,它也应该解决问题。

您还应该考虑在flush块中添加finally语句,以确保即使发生异常也会刷新流。当然,也要在该块中添加close语句。