我有一个类,它接收用户发送的消息并在终端上打印出来,但现在我正在尝试编写一个类,从用户那里读取数据,将来自用户的字符串数据转换成字节数组,并将字节数组写入套接字。
我试图使用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()
需要在这个循环中的某个地方。
更一般地说,不要调用
。准备好了()
,这是没有用的。只调用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的前:)