使用objectinputstream和objectoutputstream的java网络
我制作了两个小型控制台应用程序服务器和客户端,以了解如何让服务器和客户端使用objectInputStream和objectOutputStream相互发送多个变量值。然而,我的客户机程序似乎在我要求它创建objectInputStream对象时就卡住了。这是我的密码:使用objectinputstream和objectoutputstream的java网络,java,networking,Java,Networking,我制作了两个小型控制台应用程序服务器和客户端,以了解如何让服务器和客户端使用objectInputStream和objectOutputStream相互发送多个变量值。然而,我的客户机程序似乎在我要求它创建objectInputStream对象时就卡住了。这是我的密码: public class client { static String key, temp, tester; static UserInfo ui = new UserInfo(); public static void m
public class client {
static String key, temp, tester;
static UserInfo ui = new UserInfo();
public static void main(String[]args) throws UnknownHostException, IOException, ClassNotFoundException {
//CONNECT TO SERVER
Scanner scanner = new Scanner(System.in);
Socket socket = new Socket("127.0.0.1", 1350);
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//INPUT
System.out.println("Client:" + "Enter a message!");
ui.message = scanner.nextLine();
System.out.println("Client:" + "Enter a number!");
ui.number = scanner.nextInt();
//WRITE & SEND
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(ui);
oos.flush();
//RECEIVE AND READ
UserInfo info = (UserInfo) ois.readObject();
System.out.println("Server:" + info);
}
}
这是我的服务器代码:
public class ser {
static String key, temp;
static UserInfo ui = new UserInfo();
public static void main(String[]args) throws IOException, ClassNotFoundException {
ServerSocket s1 = new ServerSocket(1350);
System.out.println("Server started.");
Socket soc = s1.accept();
ObjectOutputStream oos = new ObjectOutputStream(soc.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(soc.getInputStream());
UserInfo info = (UserInfo) ois.readObject();
info.message += ", and this is the server's message-part";
info.number *= 3;
oos.writeObject(ui);
oos.flush();
}
}
public class UserInfo implements Serializable{
public int number;
public String message;
}
需要明确的是:我没有收到任何错误,它只是在到达objectinputstream时停止。使用objectinput/output流类是否错误?我还听说了一些关于dataoutput/inputstream的事情。这就是我应该尝试的吗
编辑:使用这个新编辑的代码,它不再冻结或死锁,但是我得到了一个异常错误,告诉我它不知道源代码:
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
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 cli.main(cli.java:33)
它只是在到达objectoutputstream时停止
不,没有。它在到达新ObjectInputStream时停止
您必须先创建ObjectOutputStream,然后再创建ObjectInputStream。否则,您将无法读取流标题。我们可以看到UserInfo吗?可能是因为您没有将字段编号和消息公开。我对其进行了编辑,但没有公开:@JacobB.:我可以保证您是错的。您的猜测将导致编译错误,而不是运行时异常或冻结的应用程序。编辑:在OP发布UserInfo类之前所做的声明。@HovercraftFullOfEels哦,是的,没错。是的,你是对的,这就是我的意思,我犯了一个打字错误。