2012-11-25 7 views
0

로컬 컴퓨터에서 SSLServerSocket 프로그램을 시험 사용하려고합니다. (이 프로그램은 서버 개체의 생성자에 대한 단일 매개 변수를 기반으로 일반 소켓이나 SSL 소켓을 사용하도록되어 있습니다. 일반 데이터, 프로그램이 예상대로 정확하게 작동하지만, SSL과 : 로컬 호스트의 Java 및 SSL

socket.getInputStream().read(); 

항상 65535 (즉 0xFFFF의)를 반환

, 원격 종료를 닫더라도. 어떤 생각이 잘못된거야? 도움이된다면 코드를 게시 할 수 있습니다. 사전에

감사

편집 : 좋아, 지금은 깨어 - 사람이 아래에 정확하게 지적했듯이, isClosed 여전히 등 false를 반환하지만, 입력 스트림 만 가지고 (바콜이 자사의 '분리'- 1의).

*** 
pool-2-thread-1, WRITE: TLSv1.1 Handshake, length = 36 
%% Cached server session: [Session-3, TLS_ECDHE_RSA_WITH_RC4_128_SHA] 
pool-2-thread-1, received EOFException: ignored 
pool-2-thread-1, called closeInternal(false) 
pool-2-thread-1, SEND TLSv1.1 ALERT: warning, description = close_notify 
pool-2-thread-1, WRITE: TLSv1.1 Alert, length = 22 
pool-2-thread-1, called closeSocket(selfInitiated) 
After use 

코드에서 : : SSL에 대한 디버그 정보를 보면

,이 보석 발견

final SSLSocket socket = (SSLSocket) ((SSLServerSocket)_ServerSocket).accept(); 
System.out.println("Before use"); 
socket.getInputStream().read(); 
System.out.println("After use"); 

그래서, 내가 (이 경우 클라이언트 끝을 -think-을하는 브라우저) 제대로 말하지 않고 전화를 끊고 있습니다.

SSL/TLS (wss : // localhost : /)를 통한 웹 소켓을 사용할 때 인증서 설치를 추가하고 Windows 7의 신뢰할 수있는 인증서에 추가하려고 시도했지만 여전히 보이지 않습니다. (html 파일은 로컬 시스템에 있고 위의 wss : URL에 연결되므로 keygen.exe의 서버 별명은 localhost 여야합니까?).

어디에서 내가 잘못 가고 있을지 아는 사람이 있습니까?

+0

휠을 다시 발명하는 대신 Netty에 웹 소켓 구현이 있고 Apache MINA, Jetty 및 Resin 프레임 워크가 있다고 생각합니다. – djangofan

답변

0

당신은 착각했습니다. read()는 결코 0xFFFF를 반환하지 않습니다. 그러나 피어가 닫히면 -1 (0xFFFFFFFF)을 반환합니다. Javadoc을 보라. 바이트가 아닌 int에 결과를 저장해야하므로 -1 EOS와 0xFF를 데이터 바이트로 구별 할 수 있습니다.

관련 문제