Java 如何从 DataInputStream 中获取字符串?
How to get String from DataInputStream in Java?
我正在开发一个由套接字组成的应用程序。它需要将一个字符串值从客户端(android 设备)传输到服务器(我运行 Ubuntu 的 PC)。
在服务器端代码中,我需要将通过套接字传输的值存储在一个字符串变量中。
这是我用来将字符串值发送到服务器的代码。
//instantiating the socket object for the client
Socket client = new Socket("192.168.0.103", port);
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
String msg = "My String Value";
//Message to be send to server
out.writeUTF(msg);
//Closing the client's socket. No connections after this.
client.close();
这是我用来在服务器上获取字符串值的代码。
//Server object. Stores the reference to the socket object returned by the accept()
//The returned socket object contains established connection to the client.
Socket server = serverSocket.accept();
DataInputStream in = new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
//This prints "My String Message"
//Something like this i want to do.
String msg = in.readUTF();
//closing the server socket. No connection now.
server.close();
现在发生的事情是服务器端的程序卡在了线上:
String msg = in.readUTF();
将 DataInputStream 中的字符串值存储到字符串变量中的正确方法是什么?
你写了一次数据,在另一边尝试读取它两次,但是那里只有一份数据需要读取。
DataInputStream in = new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
//This prints "My String Message"
这也消耗了流中存在的字符串的唯一副本。
Right now what is happening is the program at server side is getting stuck at line:
String msg = in.readUTF();
当您第二次调用 in.readUTF()
时,它等待客户端发送更多数据(另一个字符串),但由于客户端不再发送任何数据,它将永远等待(或直到您杀死它,或者连接超时)。
正如@david-conrad所解释的那样,当您第一次读取时,输入缓冲区会为下一次读取变空,因此解决方案仍然是先将内容缓冲到一个字符串中,然后您可以将该字符串用于任何事情,(例如 println)。
DataInputStream in = new DataInputStream(server.getInputStream());
String msg = in.readUTF();
System.out.println(msg);
我正在开发一个由套接字组成的应用程序。它需要将一个字符串值从客户端(android 设备)传输到服务器(我运行 Ubuntu 的 PC)。 在服务器端代码中,我需要将通过套接字传输的值存储在一个字符串变量中。
这是我用来将字符串值发送到服务器的代码。
//instantiating the socket object for the client
Socket client = new Socket("192.168.0.103", port);
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
String msg = "My String Value";
//Message to be send to server
out.writeUTF(msg);
//Closing the client's socket. No connections after this.
client.close();
这是我用来在服务器上获取字符串值的代码。
//Server object. Stores the reference to the socket object returned by the accept()
//The returned socket object contains established connection to the client.
Socket server = serverSocket.accept();
DataInputStream in = new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
//This prints "My String Message"
//Something like this i want to do.
String msg = in.readUTF();
//closing the server socket. No connection now.
server.close();
现在发生的事情是服务器端的程序卡在了线上:
String msg = in.readUTF();
将 DataInputStream 中的字符串值存储到字符串变量中的正确方法是什么?
你写了一次数据,在另一边尝试读取它两次,但是那里只有一份数据需要读取。
DataInputStream in = new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
//This prints "My String Message"
这也消耗了流中存在的字符串的唯一副本。
Right now what is happening is the program at server side is getting stuck at line:
String msg = in.readUTF();
当您第二次调用 in.readUTF()
时,它等待客户端发送更多数据(另一个字符串),但由于客户端不再发送任何数据,它将永远等待(或直到您杀死它,或者连接超时)。
正如@david-conrad所解释的那样,当您第一次读取时,输入缓冲区会为下一次读取变空,因此解决方案仍然是先将内容缓冲到一个字符串中,然后您可以将该字符串用于任何事情,(例如 println)。
DataInputStream in = new DataInputStream(server.getInputStream());
String msg = in.readUTF();
System.out.println(msg);