在客户端和服务器进程之间使用ObjectInputStream和ObjectOutputStream。

10 浏览
0 Comments

在客户端和服务器进程之间使用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时,一切都正常工作!

0