2017-12-13 13 views
0

클라이언트 및 서버 응용 프로그램을 빌드하고 둘 다 소켓 및 스트림을 통해 통신합니다. 내 서버는 이러한 스트림을 생성합니다Java 소켓 및 스트림

this.out = new DataOutputStream(sock.getOutputStream()); 
this.in = new DataInputStream(sock.getInputStream()); 
this.bufread = new BufferedReader(newInputStreamReader(sock.getInputStream())); 

을하고 그 같은 InputStream로부터 읽

DataOutputStream out = new DataOutputStream(MyClient.getOutputStream()); 
out.writeByte(17); 
out.writeBytes("value\n"); 

내가 보내고 :

type = this.in.readByte(); 
String name = this.bufread.readLine(); 

마지막으로 클라이언트가이 같은 OutputStream에 기록 바이트는 내 클라이언트에서 가져오고 서버는 바이트를 읽습니다. chars, ints 또는 다른 것을 클라이언트로부터 보내면 여전히 서버에서 바이트로 읽히게됩니까? 사용 된 특정 기능이 데이터 유형을 확인합니까?

답변

2

두 개의 다른 객체 (DataInputStream 및 InputStreamReader)에 동일한 InputStream을 래핑 할 수 없습니다. 그들은 서로에 대해 모르고 서로의 작업을 방해합니다.

소켓의 InputStream을 하나의 개체로 감싸십시오. 미가공의 바이트를 읽어 낼 필요가 있기 (위해) 때문에, DataInputStream가 가장 적합합니다.

더 이상 사용되지 않으므로 readLine method of DataInputStream은 사용할 수 없습니다. 은 그 비추천을 무시하고 어쨌든 사용하려고 시도하지 마십시오. 그것은 문자를 적절하게 처리하지 못하기 때문에 이유가 없어졌습니다.

이상적으로는 readUTF 메서드를 사용해야하지만 서버가 DataOutputStream.writeUTF을 사용하여 문자 데이터를 보내고 있는지 확인해야합니다.