【问题标题】:readline() doesn't read from socket [duplicate]readline() 不从套接字读取 [重复]
【发布时间】:2013-05-13 20:18:36
【问题描述】:
s = new Socket(InetAddress.getByName(address), port);
Thread.sleep(250);
DataOutputStream outToServer = new DataOutputStream(s.getOutputStream());       
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(s.getInputStream()));

outToServer.writeBytes("MY_QUERY");

String rs = inFromServer.readLine();

s.close();

什么都没有发生,但是如果我使用 .read() 我会收到字符串的第一个字符。

我不知道我将收到的消息长度是多少,在 python 中我使用: sock.recv(1024) 其中 1024 是我可以接收的最大长度。

有没有办法在java中做同样的事情?

【问题讨论】:

    标签: java android sockets stream inet


    【解决方案1】:

    你在读行,但不是在写行。 writeBytes() 准确地写入您提供给它的内容,不多也不少,也没有新行。

    您应该使用两个流或一个 Reader 和一个 Writer,而不是两者的混合。

    【讨论】:

    • 拜托,你能给我举个例子吗?我不明白为什么它只适用于一个字符,而对于整行它却没有
    • 因为你不是在写行,正如我所说的。您没有发送换行符,readLine() 会阻塞直到它收到一个。将\n 添加到您要发送的字符串的末尾,或者接受提示并使用BufferedWriter 而不是DataOutputStream,然后使用BufferedWriter.write(String),然后使用BufferedWriter.newline()
    • BufferedReader inFromServer = new BufferedReader( new InputStreamReader(s.getInputStream()) ); BufferedWriter outToServer = new BufferedWriter( new OutputStreamWriter(s.getOutputStream()) ); outToServer.write("QUERY"); outToServer.newLine(); rs = inFromServer.readLine(); s.close() 没有变化...
    • 在调用newLine().后尝试flush()
    【解决方案2】:

    根据readLine()的javadoc:

    读取一行文本。行被视为由换行符 ('\n')、回车符 ('\r') 或回车符后紧跟换行符中的任何一种来终止。

    确保字符串具有正确的结构。

    【讨论】:

    • 在另一端有一个 php 服务器,它解码我的查询然后写答案:@socket_write($client, implode(',', $dispositivi) . '\n');
    猜你喜欢
    • 2012-01-30
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    相关资源
    最近更新 更多