2013-05-18 2 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()은 소켓에서 읽지 않습니다.

내가받는 메시지 길이는 무엇인지 모르겠다. 파이썬에서는 다음을 사용한다. sock.recv (1024) 1024는 수신 할 수있는 최대 길이이다.

java에서 동일한 작업을 수행 할 수있는 방법이 있습니까? 내의 readLine()의 자바 독 따르면

답변

0

:

텍스트의 라인을 읽는다. 한 줄은 줄 바꿈 ('\ n'), 캐리지 리턴 ('\ r') 또는 캐리지 리턴 다음에 바로 줄 바꿈으로 끝나는 것으로 간주됩니다.

문자열의 구조가 올바른지 확인하십시오.

+0

다른 끝에서 내 쿼리를 해독 한 다음 대답을 작성하는 PHP 서버를 듣고 있습니다. @socket_write ($ client, implode (',', $ dispositivi). '\ n'); – filippo

0

줄을 읽었지만 줄을 쓰고 있지 않습니다. writeBytes()는 사용자가 제공 한 것을 정확하게 씁니다. 더 이상, 더 적게, 그리고 새로운 행은 없습니다.

두 스트림 또는 리더와 라이터를 혼합하여 사용하지 말아야합니다.

+0

제발, 제게 한 가지 예를 들어 줄 수 있습니까? 왜 하나의 단일 문자로 작동하는지 이해할 수 없으며, 전체 라인에서는 그렇지 않습니다. – filippo

+0

내가 말한 것처럼 당신이 줄을 쓰지 않기 때문입니다. 개행 문자를 보내지 않고'readLine()'이 수신 할 때까지 차단합니다. 전송할 문자열의 끝에'\ n'을 추가하거나 힌트를 가져 와서'DataOutputStream' 대신'BufferedWriter'를 사용하고'BufferedWriter.write (String)'과'BufferedWriter.newline()'. – EJP

+0

'BufferedReader inFromServer = new BufferedReader (새 InputStreamReader (s.getInputStream())); BufferedWriter outToServer = 새 BufferedWriter (새 OutputStreamWriter (s.getOutputStream())); outToServer.write ("QUERY"); \t \t \t \t \t outToServer.newLine(); rs = inFromServer.readLine(); s.close() 변경 사항이 없습니다 ... – filippo