У меня есть сервер, который прослушивает IP/Port. Сокет, который они открывают, является постоянным и не закрывается, пока не получит сообщение CLOSE от клиента, то есть ZERO байты. У меня есть код клиента следующим образом:Разъем сервера не закрыт
java.net.URL url = new java.net.URL(Constants.URL);
urlConnection = (HttpsURLConnection) url.openConnection();
if(WelcomeScreen.mySslContext==null) {
WelcomeScreen.mySslContext = GetsslContext.getSSLSocketFactory(); //reads the CA certificate and return the getSocketFactory context
}
urlConnection.setSSLSocketFactory(WelcomeScreen.mySslContext);
urlConnection.setReadTimeout(1000*15000);
urlConnection.setConnectTimeout(1000*20000);
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.setUseCaches (false);
urlConnection.connect();
//Send Stream on server
OutputStream outStream = urlConnection.getOutputStream();
outStream.write(bytes);
outStream.flush();
outStream.close();
//Receive Stream from server
in = urlConnection.getInputStream();
in.close();
urlConnection.disconnect();
После того, как приведенный выше код выполняется, сервер еще не получает ЗАКРЫТЬ сообщение, пока я на самом деле выйти из моего Android App.
Можете ли вы предложить, что мне нужно сделать, чтобы сервер получил сообщение CLOSE от клиента, чтобы они освободили соединение с каким-либо другим клиентом?
Еще одно замечание состоит в том, что при повторном выполнении вышеуказанного кода, то есть копирования-вставки и попытки отправить еще один запрос в последовательности, я могу повторно использовать сокет, открытый в первый раз. В то время как, если удалить условие:
if(WelcomeScreen.mySslContext==null)
и заставить код для выполнения:
WelcomeScreen.mySslContext = GetsslContext.getSSLSocketFactory();
затем создает новый сокет и делает SSL рукопожатия снова. Это нормальное поведение?
Итак, как мы можем отправить сообщение CLOSE на сервер/сокет с клиентской стороны? – Shivv
@Shivv В HTTP нет сообщения CLOSE. – EJP
то почему мы используем http.disconnect()? – Shivv