//服务器端的类
import java.io.*;
import java.net.*;
public class TestServer {  
DataInputStream in; // 输入流
DataOutputStream out; // 输出流
ObjectInputStream ois;
ObjectOutputStream oos;
int port = 11111;
class ServerThread extends Thread {
Socket socket = null;
public ServerThread(Socket s) {
socket = s;
}
public void run() {
try {
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
System.out.println("in in ServerThread =" + in);
System.out.println("out in ServerThread=" + out);

ois = new ObjectInputStream(socket.getInputStream());
oos = new ObjectOutputStream(socket.getOutputStream());
System.out.println("ois in ServerThread =" + ois);
System.out.println("oos in ServerThread=" + oos);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
TestServer() {
ServerSocket server = null;
Socket client = null;
try {
server = new ServerSocket(port);
client = server.accept();
new ServerThread(client).start();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[]args){
new TestServer();
}
}//客户端的类.import java.io.*;
import java.net.*;public class TestClient {
int port = 11111;
String host = "localhost";
DataInputStream in; // 输入流
DataOutputStream out; // 输出流
ObjectInputStream ois;
ObjectOutputStream oos;
class ServerThread extends Thread {
Socket socket = null;
public ServerThread(Socket s) {
socket = s;
}
public void run() {
try {
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
System.out.println("in in ServerThread =" + in);
System.out.println("out in ServerThread=" + out);
ois = new ObjectInputStream(socket.getInputStream());
oos = new ObjectOutputStream(socket.getOutputStream());
System.out.println("ois in ServerThread =" + ois);
System.out.println("oos in ServerThread=" + oos); } catch (IOException ex) {
ex.printStackTrace();
}
}
}
TestClient() {
Socket socket = null;
try {
socket = new Socket(InetAddress.getByName(host), port);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
new ServerThread(socket).start();
}
public static void main(String[] args){
new TestClient();
}
}大家先运行TestServer类,在运行TestClient类,结果是:
in in ServerThread =java.io.DataInputStream@61de33
out in ServerThread=java.io.DataOutputStream@14318bb
小弟不明白的是为什么
System.out.println("ois in ServerThread =" + ois);
System.out.println("oos in ServerThread=" + oos);
这段代码没有运行。
并且关闭客户端后会出现异常如下:
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 TestServer$ServerThread.run(TestServer.java:21)
该异常是什么意思?

解决方案 »

  1.   

    并且关闭客户端后会出现异常如下: 
    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 TestServer$ServerThread.run(TestServer.java:21) 
    这是因为你先关了服务器,再关客户端
      

  2.   

    http://hi.baidu.com/cyco00/blog/item/b18b4cd73c5224dca044df43.html
     先要把输出流关闭
      

  3.   

    我也试过了了 不过是相类似的代码,问题就出在没有先输出流 flush(),后close(),zhangxing0308 说的不错!