2015-01-07 7 views
-1

소켓으로 구성된 응용 프로그램에서 작업하고 있습니다. 그것은 클라이언트 (안드로이드 장치)에서 서버 (우분투를 실행하는 내 PC)에 문자열 값을 전송해야합니다. 서버 측 코드에서 소켓을 통해 전송되는 값을 String 변수에 저장해야합니다.Java의 DataInputStream에서 문자열을 가져 오는 방법은 무엇입니까?

다음은 String 값을 서버에 보내는 코드입니다.

//instantiating the socket object for the client 
Socket client = new Socket("192.168.0.103", port); 

OutputStream outToServer = client.getOutputStream(); 

DataOutputStream out = new DataOutputStream(outToServer); 

String msg = "My String Value"; 

//Message to be send to server 
out.writeUTF(msg); 

//Closing the client's socket. No connections after this. 
client.close(); 

다음은 서버에서 문자열 값을 가져 오는 데 사용하는 코드입니다.

//Server object. Stores the reference to the socket object returned by the accept() 
//The returned socket object contains established connection to the client. 
Socket server = serverSocket.accept(); 

DataInputStream in = new DataInputStream(server.getInputStream()); 
System.out.println(in.readUTF()); 
//This prints "My String Message" 

//Something like this i want to do. 
String msg = in.readUTF(); 

//closing the server socket. No connection now. 
server.close(); 
서버 측 프로그램이 행에 붙어지고있다

이 지금 무슨 일이 일어나고 :

String msg = in.readUTF(); 

String 변수에의 DataInputStream의 문자열 값을 저장하는 올바른 방법은 무엇입니까?

+2

두 번 읽으면서 한 번만 쓰는 중입니다. 한 번만 쓰면 두 번 읽을 수 없습니다. –

+0

좋은 캐치!. 그러나 아직도 나는 그렇게하는 가장 좋은 방법을 찾고있다. – priyankvex

+0

16 비트 제한 조건에 부합하는 최상의 방법이 이미 있습니다. – EJP

답변

1

데이터를 한 번만 쓰고 다른 한 쪽에서는 두 번 읽으려고 시도하지만 읽을 데이터 복사본은 하나뿐입니다.

DataInputStream in = new DataInputStream(server.getInputStream()); 
System.out.println(in.readUTF()); 
//This prints "My String Message" 

이렇게하면 스트림에있는 문자열의 복사본 만 소모됩니다.

서버 측의 프로그램은 라인에 붙어지고 지금 무슨 일이 일어나고있는 것입니다 :

String msg = in.readUTF(); 

두 번째 시간 in.readUTF() 전화, 그것은 클라이언트가 (더 많은 데이터를 보낼 때까지 기다립니다 다른 문자열), 클라이언트가 더 이상 데이터를 보내지 않으므로 영원히 (또는 사용자가 죽이거나 연결 시간이 종료 될 때까지) 대기합니다. 처음 읽을 때 @ 데이비드 - 콘래드 설명으로

0

는, 입력 버퍼는 다음 읽고 빈되고, 그래서 해결책은 첫째 버퍼링에 문자열로 컨텐츠를 유지하다가 당신은 아무것도에 대한 해당 문자열, (에 println을 사용할 수 있습니다 예를 들어,).

DataInputStream in = new DataInputStream(server.getInputStream()); 
String msg = in.readUTF(); 
System.out.println(msg);