2012-03-22 4 views
0

현재 서버에서 클라이언트와의 연결을 만들려고합니다. 각 연결에 대한 스레드를 만들었지 만 서버가 현재 입력 스트림을 생성하지 않습니다. 숫자를 인쇄하여 테스트했지만 인쇄물이 1과 2 만 인쇄됩니다. Im 이것이 실종 된 작은 문제 일뿐입니다.작동 할 ObjectInputStream을 가져올 수 없습니다.

public class ObjectHandler implements Runnable{ 
    Socket sock; 
    ObjectInputStream ois; 
    ObjectOutputStream oops; 
    InputStream is; 


    public ObjectHandler(Socket clientSocket) throws IOException { 
     System.out.println("1"); 
     sock = clientSocket; 

     is = sock.getInputStream(); 
     System.out.println("2"); 
     ois = new ObjectInputStream(new BufferedInputStream(is)); 
     System.out.println("3"); 

     OutputStream os = sock.getOutputStream(); 

     oops = new ObjectOutputStream(new BufferedOutputStream(os)); 
     outputSockets.add(oops);  

    } 

나는 이제 throw IOException을 제거하고 판독기를 try catch로 둘러 쌌다. 클라이언트가 충돌 한 후 이제이 오류를 인쇄합니다.

at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280) 
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749) 
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779) 
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279) 
at ThreadPool$ObjectHandler.<init>(ThreadPool.java:95) 
at ThreadPool.addThread(ThreadPool.java:31) 
at ObjectServerTest.go(ObjectServerTest.java:93) 
at ObjectServerTest.main(ObjectServerTest.java:124) 
+1

당신이 예외를 받고 있습니까? 스택 추적을 해줄 수 있습니까? –

+2

이것은 스택 추적의 일부일뿐입니다. 우리는 그것 모두를 볼 필요가있다. – skaffman

답변

6

, 당신은 항상처음플러시을 (인해 스트림이 어떻게 구현되는지에) 입력 스트림을 작성하기 전에 출력 스트림을 구성해야합니다.

0

BufferedInputStream을 제거하십시오. 너는 필요 없어. 4K 바이트를 읽을 때까지 기다리고 있습니다.

편집 : BufferedOutputStream도 제거하십시오. 그리고 클라이언트 측에서 출력 스트림을 비우고 있는지 확인하십시오. 객체를 구성하는 소켓을 통해 스트리밍 할 때

+1

버퍼 된 입력 스트림을 만들면 읽기가 트리거되지 않습니다. 더 중요한 점은 버퍼링 된 입력 스트림에서 읽는 경우 값을 반환하기 전에 4KB의 데이터를 읽을 필요가 없다는 것입니다. – Perception

0

이것은 나를 위해 작동 ...

ObjectHandler :

public ObjectHandler(Socket clientSocket) throws IOException { 
    System.out.println("1"); 
    sock = clientSocket; 
} 


@Override 
public void run() { 
    try { 
     is = sock.getInputStream(); 
     System.out.println("2"); 
     ois = new ObjectInputStream(new BufferedInputStream(is)); 
     System.out.println("3"+ois.readFloat()); 

     OutputStream os = sock.getOutputStream(); 

     oops = new ObjectOutputStream(new BufferedOutputStream(os)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

클라이언트 :

public static void main(String[] args) throws UnknownHostException, IOException { 
    Socket client = new Socket(InetAddress.getByName("localhost"), 8888); 
    OutputStream os = client.getOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(os); 
    oos.writeFloat(new Float(10.10)); 
    oos.flush(); 
} 
관련 문제