下面这段代码总是调不通,请教各位。多谢
Client:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;public class Main {    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 2222);
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());            Request req = new Request("login");
            req.setData("UserName", "名字");
            req.setData("Password", "密码");            oos.writeObject(req);
            oos.flush();
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}import java.io.Serializable;
import java.util.Properties;public class Request implements Serializable {    private String type;//请求类型
    private Properties parameters;//请求所带的参数
    private static final long serialVersionUID = 800120791203985L;    public Request(String type) {
        parameters = new Properties();
        this.type = type;
    }    public void setData(String key, String value) {
        this.parameters.setProperty(key, value);
    }    public String getData(String key) {
        return this.parameters.getProperty(key);
    }    public Properties getAllParameters() {
        return this.parameters;
    }    public String getType() {
        return type;
    }
}Server:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;public class Main {    public static void main(String[] args) {
        try {
            ServerSocket socket = new ServerSocket(2222);
            Socket sock = socket.accept();
            ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
            ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());            Request req;
            req=(Request)ois.readObject(); //#1        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); //#2
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }
}import java.io.Serializable;
import java.util.Properties;public class Request implements Serializable {
    private String type;//请求类型
    private Properties parameters;//请求所带的参数    public Request(String type) {
        parameters = new Properties();
        this.type = type;
    }    public void setData(String key, String value) {
        this.parameters.setProperty(key, value);
    }    public String getData(String key) {
        return this.parameters.getProperty(key);
    }    public Properties getAllParameters() {
        return this.parameters;
    }    public String getType() {
        return type;
    }
}连接的时候Server端#1处会抛出错误到#2处。
请问是什么原因?谢谢了

解决方案 »

  1.   

    补充下:
    报的错误如下:
    SEVERE: null
    java.net.SocketException: Connection reset
            at java.net.SocketInputStream.read(SocketInputStream.java:168)
            at java.net.SocketInputStream.read(SocketInputStream.java:182)
            at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2247)
            at java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2540)
            at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2550)
            at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
            at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
            at javaapplication1.Main.main(Main.java:29)
      

  2.   

    你在client端定义了private static final long serialVersionUID = 800120791203985L;
    在服务端也要定义private static final long serialVersionUID = 800120791203985L;
    server端的 req成员对象在main方法外定义,自己添加打印语句测试通过
    显示结果:
    Request@16caf43
    {UserName=name, Password=password}
    import java.io.Serializable;
    import java.util.Properties;public class Request implements Serializable {
        /**
     * 
     */
    private static final long serialVersionUID = 800120791203985L;
    private String type;
        private Properties parameters;
        public Request(String type) {
            parameters = new Properties();
            this.type = type;
        }    public void setData(String key, String value) {
            this.parameters.setProperty(key, value);
        }    public String getData(String key) {
            return this.parameters.getProperty(key);
        }    public Properties getAllParameters() {
            return this.parameters;
        }    public String getType() {
            return type;
        }
    }import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.logging.Level;
    import java.util.logging.Logger;public class Main{    private static Request req;   //req 定义为成员变量 public static void main(String[] args) {
            try {
                ServerSocket socket = new ServerSocket(2222);
                Socket sock = socket.accept();
                ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
                //ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());           
    req=(Request)ois.readObject();            //#1
    System.out.println(req);         
    System.out.println(req.getAllParameters());        } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);        //#2
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } 
        }
    }
      

  3.   

    还是不行...我把两边的serialVersionUID改为1L了,但还是报错。不过是从ClassNotFoundException中报错了。
      

  4.   

    搞定了。是Server和Client的Request类不在同一个名称的包里,在两边都单独建一个一样名称的包,把Request放进去就好了。谢谢楼上的两位。不过我还想知道这是为什么?