当前位置: 首页 > 知识库问答 >
问题:

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

闻鹤龄
2023-03-14

我有一个类,它接收用户发送的消息并在终端上打印出来,但现在我正在尝试编写一个类,从用户那里读取数据,将来自用户的字符串数据转换成字节数组,并将字节数组写入套接字。

我试图使用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是一个与我发送到的服务器和端口号相同的套接字!

当我运行这个时没有错误,所以我真的不知道为什么它不会将消息发送到套接字。

共有1个答案

田彬郁
2023-03-14

String newLine=r.readLine()

也许你误解了java是如何工作的;只有当你相信这建立了一种别名时,你的困惑才是合乎逻辑的:每次newLine都是如此,它只是r.readLine()的简写。

java不是这样工作的。在这段代码中,你从一开始就从r中读了一行,一次也没有读过。上面这一行的意思是:此时此刻执行r.readLine(),允许该方法将它获得的字符串放在内存中的某个位置,然后让换行符成为该字符串的别名,而不是“从网络缓冲区中提取另一个字符串”的一般想法。

r.readLine()需要在这个循环中的某个地方。

更一般地说,不要调用。准备好了(),这是没有用的。只调用readLine()。调用它将“阻塞”,直到数据自动可用,当不再有数据时,将返回null(因为连接已经关闭)。

 类似资料:
  • 我得到一个错误读数:

  • 问题内容: 我有一个一维String数组,我想将其转换为一维字节数组。我该怎么做呢?这需要ByteBuffer吗?我怎样才能做到这一点?(字符串可以是任意长度,只想知道如何执行这样的操作。将其转换为字节数组后,如何将其转换回String数组? -担 问题答案: 数组到数组 ,应该 手动 将其转换为两边,但是如果只有一个String,则可以和; 像这样 对于string []中的一个字节[],您必须

  • 问题内容: 我有以下代码,我试图通过测试,但似乎无法理解Java世界中各种编码形式。 我想我的问题是:将任意字节的字节数组转换为Java字符串,然后将同一Java String转换为另一个字节数组的正确方法是什么,该字节数组将具有与原始字节相同的长度和相同的内容数组? 问题答案: 尝试特定的编码: ideone链接

  • 问题内容: 我正在编写一个Java套接字程序来从服务器读取数据,我无法控制服务器,以下是协议的约定, 2字节:幻数 2字节:数据长度 N字节:ASCII字符串数据有效载荷 大尾数表示幻数和数据长度 例如:如果我的请求是“ command / 1 / getuserlist”,如何构造以上协议的请求匹配并将响应读回到List 我是套接字编程的新手,也不知道如何构建我的请求并读回响应。 有人可以指导我

  • 我正在制作一个程序,该程序应该让用户输入一个字符串,其中包含一个学生的名字,后跟他们的测验、家庭作业和考试分数(用户输入决定每个学生的分数),并获取每个数据段并将其添加到一个数组中。 我计划通过4个不同的数组来做到这一点:1个用于名称,1个用于HW分数,1个用于测验分数,1个用于考试分数。 它的工作原理是为每个学生输入名称,然后输入分数,每个分数前面都有字母,表示分数的类型。例子: 让程序将每个名

  • 问题内容: 如何将Java字符串转换为ASCII字节数组? 问题答案: 使用该方法,为其指定适当的名称(或名称)。 例: (Java 7的前:)