我使用ObjectOutputStream从客户端写入对象到网络中,在服务器端读取对象,
然后保存到文件中。但是当我把对象写入到网络中时,出现异常。
client.java
public class Client<M> {
public void add(M m) {//向远程网络中存储对象
Socket socket;
ObjectOutputStream oos = null;
try {
try{
socket = new Socket("127.0.0.1", 8011);
OutputStream os = socket.getOutputStream();
oos = new ObjectOutputStream(os);
oos.writeObject(m);
oos.flush();
}finally {
if(oos!=null){
oos.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Server.java
public class Server {
public static void main(String[] args) {
new Server().startServer();
}
public void startServer(){
ServerSocket ss;
ServerThread st;
try {
ss = new ServerSocket(8011);
while(true){
System.out.println("服务已经开启");
Socket socket = ss.accept();
st = new ServerThread(socket);//创建线程对象
ExecutorService es = Executors.newCachedThreadPool();
es.execute(st); //开启线程
es.shutdown();
socket.close();//关闭socket
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
线程
ServerThread.java
public class ServerThread implements Runnable{
private Socket socket;
//private ObjectOutputStream oos = new ObjectOutputStream();
private FileOutputStream fos;
private ObjectInputStream ois;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
InputStream is = socket.getInputStream();
ois = new ObjectInputStream(is);
Object obj = ois.readObject();//读取网络中的对象
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(ois!=null)
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
错误如下:
通过客户端向服务器写入对象
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.flush(Unknown Source)
at java.io.ObjectOutputStream.flush(Unknown Source)
at java.io.ObjectOutputStream.close(Unknown Source)
at com.fan.client.Client.add(Client.java:21)
at com.fan.bean.BaseStore.save(BaseStore.java:22)
at com.fan.execute.StudentExecute.studentExecute(StudentExecute.java:32)
at com.fan.execute.StuSelectionCourseSys.startview(StuSelectionCourseSys.java:32)
at com.fan.test.Test.main(Test.java:11)
希望同志们能给予我解答,十分感谢!!!!