私はクライアントとサーバーのJavaアプリケーションを開発し、ObjectOutputStreamとObjectInputStreamを使用してクライアントとサーバープロセス間でデータを送受信しました。配列またはオブジェクトまたはプリミティブデータを送信する必要がありますが、ObjectOutputStreamおよびObjectInputStreamを使用してプリミティブな値(writeDouble()、readDouble()、writeUTF()、readUTF())を受け取ったときに問題が発生します。プログラムは一時停止し、動作を停止しました。なぜ、問題は何ですか?クライアントとサーバープロセスの間のObjectInputStreamとObjectOutputStreamの使用
これらは、私のプログラムの断片
// client program
ObjectOutputStream toServer;
ObjectInputStream fromServer;
// Establish connection with the server
Socket socket = new Socket(host, 7000);
// Create an output stream to the server
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);
}
// server program
private ObjectOutputStream outputToClient;
private ObjectInputStream inputFromClient;
// Create a server socket
ServerSocket serverSocket = new ServerSocket(7000);
while (true) {
// Listen for a new connection request
Socket socket = serverSocket.accept();
System.out.println("connect ");
outputToClient = new ObjectOutputStream(socket.getOutputStream());
// Create an input stream from the socket
inputFromClient =
new ObjectInputStream(socket.getInputStream());
while(true) {
// Read from input
String command = inputFromClient.readUTF();
System.out.println("receive command");
checkRequest(command);
}
// Write to the file
//outputToFile.writeObject(object);
}
public void checkRequest(String cmd){
//Object o = null;
try{
if(cmd.equals(MULTIBLY)){
double x = inputFromClient.readDouble();
double y = inputFromClient.readDouble();
double result = x*y;
outputToClient.writeDouble(result);
System.out.println("send result");
}else if (cmd.equals(DIVIDE)){
int x = inputFromClient.readInt();
int result = 1000/x;
outputToClient.writeDouble(result);
}
} catch(IOException io){
}
}
私はDataOutputStreamを とのDataInputStreamへのObjectOutputStreamとObjectInputStreamのを変更したときにすべてのものが正しくなっています!
これは今正しく動作しています:) – sahar
データを送信してデータを受信する前にflush()を使用しますか? –