在客户端和服务器进程之间使用ObjectInputStream和ObjectOutputStream。
在客户端和服务器进程之间使用ObjectInputStream和ObjectOutputStream。
我开发了一个客户端-服务器的Java应用程序,我使用ObjectOutputStream和ObjectInputStream在客户端和服务器进程之间发送和接收数据。我需要发送数组、对象或原始数据,但当我使用ObjectOutputStream和ObjectInputStream发送和接收原始值(writeDouble()、readDouble()、writeUTF()、readUTF())时,程序挂起并停止工作。为什么会出现这个问题?这是我的程序片段:
// 客户端程序
ObjectOutputStream toServer;
ObjectInputStream fromServer;
// 与服务器建立连接
Socket socket = new Socket(host, 7000);
// 创建与服务器的输出流
toServer = new ObjectOutputStream(socket.getOutputStream());
fromServer = new ObjectInputStream(socket.getInputStream());
double num1 = Double.parseDouble(jtf1.getText().trim());
double num2 = Double.parseDouble(jtf2.getText().trim());
try {
toServer.writeUTF("multiply");
toServer.writeDouble(num1);
toServer.writeDouble(num2);
double result = fromServer.readDouble();
res.setText(String.valueOf(result));
} catch (IOException ex) {
System.err.println(ex);
}
// 服务器程序
private ObjectOutputStream outputToClient;
private ObjectInputStream inputFromClient;
// 创建服务器套接字
ServerSocket serverSocket = new ServerSocket(7000);
while (true) {
// 监听新的连接请求
Socket socket = serverSocket.accept();
System.out.println("连接成功");
outputToClient = new ObjectOutputStream(socket.getOutputStream());
// 从套接字创建输入流
inputFromClient = new ObjectInputStream(socket.getInputStream());
while (true) {
// 从输入流读取
String command = inputFromClient.readUTF();
System.out.println("接收到命令");
checkRequest(command);
}
}
public void checkRequest(String cmd) {
try {
if (cmd.equals(MULTIPLY)) {
double x = inputFromClient.readDouble();
double y = inputFromClient.readDouble();
double result = x * y;
outputToClient.writeDouble(result);
System.out.println("发送结果");
} else if (cmd.equals(DIVIDE)) {
int x = inputFromClient.readInt();
int result = 1000 / x;
outputToClient.writeDouble(result);
}
} catch (IOException io) {
}
}
当我将ObjectOutputStream和ObjectInputStream更改为DataOutputStream和DataInputStream时,一切都正常工作!