import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;public class MyClient {
private static final long serialVersionUID = 800120791203985L; static Socket server; public static void main(String[] args) throws Exception {
server = new Socket(InetAddress.getLocalHost(), 8081);
ObjectOutputStream oos = new ObjectOutputStream(server
.getOutputStream());
System.out.println("start");
People p = new People();
p.setAge(25);
p.setName("sean");
oos.writeObject(p);
oos.flush(); }
}
import java.io.IOException;
import java.io.ObjectInputStream;
import java.lang.reflect.Constructor;
import java.net.ServerSocket;
import java.net.Socket;public class MyServer {
private static final long serialVersionUID = 800120791203985L; public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8081);
Socket client = server.accept();
ObjectInputStream ois = new ObjectInputStream(client.getInputStream()); //这行debugger的时候出现问题了
Object o;
try {
o = ois.readObject();
MyServer ms = new MyServer();
ms.deal(o);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//client.close();
} } public void deal(Object o) {
Class oc = o.getClass();
Constructor[] cs = oc.getConstructors();
Constructor c = cs[0];
String name = c.getName();
System.out.println("the name of the received object is :: " + name);
// c.newInstance(initargs)
}
}
另外people类就是简单的javabean
当我上面的client和server进行调试的时候(debugger)出现以下错误Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at MyServer.main(MyServer.java:14)
而我正常运行的话可以正常处理。
所以我的问题是这到底是为什么会出现这问题?
import java.net.InetAddress;
import java.net.Socket;public class MyClient {
private static final long serialVersionUID = 800120791203985L; static Socket server; public static void main(String[] args) throws Exception {
server = new Socket(InetAddress.getLocalHost(), 8081);
ObjectOutputStream oos = new ObjectOutputStream(server
.getOutputStream());
System.out.println("start");
People p = new People();
p.setAge(25);
p.setName("sean");
oos.writeObject(p);
oos.flush(); }
}
import java.io.IOException;
import java.io.ObjectInputStream;
import java.lang.reflect.Constructor;
import java.net.ServerSocket;
import java.net.Socket;public class MyServer {
private static final long serialVersionUID = 800120791203985L; public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8081);
Socket client = server.accept();
ObjectInputStream ois = new ObjectInputStream(client.getInputStream()); //这行debugger的时候出现问题了
Object o;
try {
o = ois.readObject();
MyServer ms = new MyServer();
ms.deal(o);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//client.close();
} } public void deal(Object o) {
Class oc = o.getClass();
Constructor[] cs = oc.getConstructors();
Constructor c = cs[0];
String name = c.getName();
System.out.println("the name of the received object is :: " + name);
// c.newInstance(initargs)
}
}
另外people类就是简单的javabean
当我上面的client和server进行调试的时候(debugger)出现以下错误Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at MyServer.main(MyServer.java:14)
而我正常运行的话可以正常处理。
所以我的问题是这到底是为什么会出现这问题?
ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
这句出现上面reset问题
惊奇的发现...你没有做线程...
既然主线程都阻塞了,你又怎么能获得客户端连接那...
把你的Server和Client都改成Thread吧
在Debug启动Client做完这
server = new Socket(InetAddress.getLocalHost(), 8081);
ObjectOutputStream oos = new ObjectOutputStream(server
.getOutputStream());
先停下
让Server端的accept()后面的
ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
做完了
就可以让Client继续做完结束了 最后接着做Server看行不,能不能解决
为什么我给server传递一个对象后需要把socket关闭呢?
不关闭就出现上面的connection reset问题?