我正在尝试创建一个网络连接的基本示例,其中我使用ObjectOutputStream,ObjectInputStream和套接字。客户端将字符串“Hello”发送到服务器。如您所见,此字符串使用相同的ObjectOutputStream发送10次。然后服务器将字符串“Goodbye”发送给客户端。控制台应显示字符串“hello”的10倍和字符串“Goodbye”的10倍。但他们只有一次出现。我在很多线程中读到了ObjectOutputStream的方法reset()。但它似乎对我不起作用。有什么想法是什么问题?我已经尝试过许多不同的事情而没有成功。
这是客户:
try
{
Socket socket = new Socket("localhost", 5555);
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
int i = 10;
while (i > 0)
{
//send String
out.writeObject("Hello");
out.flush();
out.reset();
//receive String
String result = (String) in.readObject();
System.out.println(result);
i--;
}
} catch (IOException e)
{
e.printStackTrace();
} catch (ClassNotFoundException e)
{
e.printStackTrace();
} finally
{
out.close();
in.close();
socket.close();
}
这是服务器:
try
{
ServerSocket server = new ServerSocket(5555);
while(true)
{
try
{
Socket client = server.accept();
ObjectInputStream in = new ObjectInputStream(client.getInputStream());
ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());
//receive String
String input = (String) in.readObject();
System.out.println(input);
out.writeObject("Goodbye");
out.flush();
out.reset();
} catch(IOException e1)
{
e1.printStackTrace();
} catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
} catch(IOException e2)
{
e2.printStackTrace();
}
答案 0 :(得分:0)
您的服务器只对每个接受的套接字进行一次读写。所以客户端不可能十次读取对象。
您的服务器在完成后也没有关闭流。