我正在聊天客户端,我创建了一个注册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语句生成的。
有谁能告诉我为什么会这样,以及如何纠正它?
非常感谢。
答案 0 :(得分:1)
来自javadoc的IOException定义
表示发生了某种I / O异常。此类是由失败或中断的I / O操作产生的一般异常类。
虽然我无法访问您的完整堆栈跟踪,但语句Dell/127.16.3.24
让我相信这是创建套接字时给出的IP地址。
我想你可能想尝试使用InetAddress.getLocalHost().getHostAddress
,它只返回IP
,而InetAddress.getLocalHost()
也会返回系统的主机名。
InetAddress.getLocalHost
返回本地主机的地址。这是通过检索来实现的 系统中主机的名称,然后将该名称解析为 的InetAddress。
请注意,如果你已经知道你想要本地主机ip,你可以在创建套接字时简单地传递“127.0.0.1”,它也应该解决问题。
您还应该考虑在flush
块中添加finally
语句,以确保即使发生异常也会刷新流。当然,也要在该块中添加close
语句。