下面这段代码总是调不通,请教各位。多谢
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处。
请问是什么原因?谢谢了
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处。
请问是什么原因?谢谢了
报的错误如下:
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)
在服务端也要定义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);
}
}
}