当前位置: 代码迷 >> Java相关 >> JAVA中使用Socket连接关闭时出现的错误如何避免呢
  详细解决方案

JAVA中使用Socket连接关闭时出现的错误如何避免呢

热度:46   发布时间:2016-04-22 20:51:06.0
JAVA中使用Socket连接关闭时出现的异常如何处理呢?
//服务器代码
package com.tt;
import java.io.*;
import java.net.*;
public class get extends Thread{
Socket s;
public static void main(String[] args) {
// TODO Auto-generated method stub
get g=new get();
g.run();
}
public get()
{
try {
ServerSocket ss = new ServerSocket(9999);;
   System.out.println("9999号监听");
s=ss.accept();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run()
{
while(true)
{
try {
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
User u=(User)ois.readObject();
System.out.println(u.getName());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}    
}
}
//客户端代码
package com.tt;
import java.io.*;
import java.net.*;
public class link extends Thread{
Socket s;
public static void main(String[] args) {
// TODO Auto-generated method stub
link l=new link();
l.run();
}
public link()
{
try {

s= new Socket("127.0.0.1",9999);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run()
{  while(true)
{
User u=new User();
u.setName("1");
ObjectOutputStream oos;
try {
oos = new ObjectOutputStream(s.getOutputStream());
oos.writeObject(u);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

无论先关闭客户端,还是关闭服务器都会不断的抛出异常。请问有没有什么具体可行的解决方案。希望能得到各位大神的解决代码。谢谢了
------解决思路----------------------
你的代码中都根本没有关闭socket InputStream 或 socket ,你的“关闭”是指直接到程序的窗口右上角 X 点了?这当然不行。
既然你关闭程序都没耐心,还管什么exception 打印到日志看起来不好看。
------解决思路----------------------
引用:
你的代码中都根本没有关闭socket InputStream 或 socket ,你的“关闭”是指直接到程序的窗口右上角 X 点了?这当然不行。
既然你关闭程序都没耐心,还管什么exception 打印到日志看起来不好看。

socket类的默认实现是重写了finalize()方法的,在垃圾回收的时候会自动关闭输入输出流

楼主的错误明显在于,试图对一个已经被关闭的流进行读写,导致IOException
  相关解决方案