繁体   English   中英

如何将用户的字符串数据作为字节数组写入套接字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM