2013-05-18 82 views
1
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()我收到字符串的第一个字符。readline()不从套接字读取

我不知道什么是我会收到的信息,我在Python中使用:sock.recv(1024)其中1024是我可以接收的最大长度。

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

回答

0

据的readLine()的javadoc的:

读取一行文本。换行符被换行符('\ n'),回车符('\ r')或回车符后面的换行符中的任何一个结束。

确保字符串的结构正确。

+0

在另一端有一个PHP服务器,解码我的查询,然后写回答: @socket_write($ client,implode(',',$ dispositivi)。'\ n'); – filippo

0

您正在阅读的文章,但您并未撰写文章。 writeBytes()完全写出你提供给它的内容,不多也不少,并且没有新行。

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

+0

请问,你能举个例子吗? 我不明白为什么它只用一个单独的字符,而对于整行它不是 – filippo

+0

因为你不写行,正如我所说的。您不会发送换行符,并且'readLine()'会阻塞,直到它接收到一个换行符。在你发送的字符串的末尾添加'\ n',或者使用提示并使用'BufferedWriter'而不是'DataOutputStream',然后使用'BufferedWriter.write(String)'和BufferedWriter.newline ()'。 – EJP

+0

'BufferedReader inFromServer = new BufferedReader(new InputStreamReader(s.getInputStream())); BufferedWriter outToServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); outToServer.write(“QUERY”); \t \t \t \t \t outToServer.newLine(); rs = inFromServer.readLine(); s.close() ' 有没有改变... – filippo