[英]How to write the string data from user as byte array to socket
我有一个类可以接收用户发送的消息并将它们打印在终端上,但是现在我正在尝试编写一个从用户读取数据的类,将来自用户的字符串数据转换为字节数组,然后写入字节数组到套接字。
我正在尝试使用 BufferedReader 从用户读取数据并使用 OutputStream 将字节数组写入套接字,但由于某种原因,我写入套接字的消息未传递到服务器。
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String newLine = r.readLine();
while (r.ready() && newLine != null) {
// TODO: read data from the user, blocking until ready. Convert the
//string data from the user into an array of bytes and write
//the array of bytes to "socket".
byte[] message = newLine.getBytes();
OutputStream outputStream = s.getOutputStream();
outputStream.write(message);
}
s
是与我将其发送到的具有相同服务器和端口号的套接字!
运行它时没有错误,所以我真的不知道为什么这不会将消息发送到套接字。
String newLine = r.readLine();
也许你误解了java是如何工作的; 只有当您认为这设置了一种别名时,您的困惑才合乎逻辑:每次newLine
被触及,它只是r.readLine()
的简写。
这不是java的工作方式。 您在这段代码中从r
读取了一行,从一开始,就再也没有了。 上面那行的意思是:就在r.readLine()
执行r.readLine()
,允许该方法将它获取的字符串放在内存中的某个位置,然后让newLine
成为该字符串的别名,而不是“拉另一个字符串”的一般想法关闭网络缓冲区'。
r.readLine()
需要在该循环中的某个位置。
更一般地,不要调用.ready()
,它没有用。 仅调用readLine()
。 调用它将“阻塞”直到数据自动可用,并且在没有更多数据到来时将返回null
(因为连接已关闭)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.