2010-02-05 2 views
3

java에 소켓 기반 서버를 쓰고 있습니다. 클라이언트가 웹 브라우저에 연결하고 서버가 간단한 html 코드를 보내고 다음에 클라이언트가 다시 연결될 때 인식하도록 쿠키를 설정합니다. PrintStream을 사용하여 소켓에 쓰지만 플러시가 작동하지 않습니다. 내가 플러시 할 수있는 유일한 방법은 shutdownoutput 또는 close를 사용하여 소켓 스트림을 닫는 것입니다. 하지만 나는 코드에서 여러 곳에서 여러 번 읽고/쓰고 있기 때문에 그것을 원하지 않습니다. 무엇을 할 수 있습니까? 태그에서 도움을 얻을 수 없습니다. 다른 버퍼링 된 작성자 클래스도 같은 문제를 시도했습니다.Java 소켓 OutputStream이 플러시되지 않습니다

+0

서버 코드의 예를 게시 할 수 있습니까? – Kylar

+2

이것은 실제로 오래되었지만 후손의 경우''\ n "'이 인쇄 될 때 플러시가 발생하기 때문에''ps.flush()'는 불필요합니다. 즉'println()'이 호출됩니다. 또한,'SocketOutputStream'에서'flush()'메서드는 아무 것도하지 않습니다. – Gray

답변

0

내가 플러시 대신이 메서드를 호출하려고 할 것이다 : 그것은 플러시 할 몇 가지 이유로 실패하는 경우

public boolean checkError() 
Returns: 
    True if and only if this stream has encountered an IOException other than InterruptedIOException, or the setError method has been invoked 

참조 (checkError는 내부적으로 플러시 호출하고 오류 상태를 기억합니다).

텔넷을 사용하여 서버에 연결하고 데이터가 즉시 반환되는지 확인하거나 간단한 자바 클라이언트 소켓 프로그램을 작성하여 (네트워크에서 잘라내어 붙여 넣기) 검사해볼 가치가 있습니다.

html을 표시하기 전에 브라우저가 의도적으로 더 많은 입력을 기다리기로 결정했을 수도 있습니다 (특히 HTML이 완벽하게 형성되지 않은 경우). 과거에이 문제가 나 자신을 기억하는 것 같습니다.

4

아, 그래, sillyproblem, 그냥 pstream.writeln (""); breader.readLine()은 '\ n'문자를 찾을 때까지 읽습니다. write()가 작동하지 않습니다.