2013-10-26 3 views
3


Java 소켓을 사용하여 클라이언트 - 서버 프로그램을 작성했으며 정상적으로 작동합니다. 이제 클라이언트와 서버 간의 통신을 위해 HTTPS로 이동하려고합니다.
내 코드는 Java 내장 소켓 (소켓 및 ServerSocket)을 기반으로하며 잘 작동합니다. 그러나 HTTPS 소켓 (SSLSocketSSLServerSocket) 을 나머지 코드을 변경하지 않고 사용하면 불행하게도 더 이상 작동하지 않습니다.

프로그램에서 서버와 클라이언트간에 분당 데이터를 보내고받을 수 있도록 영구 연결이 필요합니다. 문제는 첫 번째 트랜잭션이 완료된 후 서버 또는 클라이언트 측에서 HTTPS 연결이 닫혀있는 것 같습니다.

좀더 정확하게 말하면 다음과 같습니다.
1. 서버는 SSLServerSocket을 만들고 "accept()"를 호출합니다.
2. 클라이언트가 SSLSocket을 만들고 서버에 연결합니다. 그런 다음 "DataOutputStream"을 통해 서버에 씁니다.
3. 서버는 "DataInputStream"을 통해 클라이언트를 읽고 "DataOutputStream"을 통해 응답을 보냅니다.
4. 클라이언트가 "DataInputStream"을 통해 서버를 읽습니다.
지금까지는 모든 것이 괜찮습니다! 그러나 클라이언트가 다른 스트림을 보내면 서버 측에서 이전에 사용한 것과 동일한 방법을 통해 서버에서 "available()"데이터를 얻을 수 없습니다.

이 연결을 유지할 수있는 방법이 있습니까?

ur에 대한 Tnx는 사전에 도움이됩니다!Java SSLSocket이 지속되지 않음 (HTTPS 영구 연결 필요)

+0

코드를 추가해주세요. 순간에 "스트림 보내기"가 의미하는 것이 명확하지 않습니다. – Jk1

답변

1

InputStream.available()은 소켓 입력을 감지하는 신뢰할만한 방법이 아닙니다. 따라서 연결이 살아 있지 않다는 증거가 없습니다. 읽기 방법으로 차단하십시오. 이는 클라이언트 당 읽기 전용 스레드를 의미합니다.