как повторно использовать соединение сокета TCP (возможно setReuseAddress (true), но не работает для меня) для загрузки нескольких файлов с сервера (Apache, HTTPD) в соединение без отключения (и снова подключаться).Android, как повторно использовать Socket?
Мой код ниже ..
public class ClientThread implements Runnable {
public void run() {
try {
Log.d("ClientActivity", "C: Connecting...");
SocketAddress sockaddr = new InetSocketAddress(serverIpAddress, SERVERPORT);
socket = new Socket();
socket.setReuseAddress(true);
socket.setKeepAlive(true);
socket.setSoLinger(true, 3000);
socket.connect(sockaddr);
if (socket.isConnected()) {
DataInputStream input = new DataInputStream(socket.getInputStream());
PrintWriter output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
output.println("GET /way/images/profile/1231 HTTP/1.1");
output.println("Host: 192.168.1.2");
output.println("User-Agent: Java");
output.println("Accept: */*");
output.println("Connection: Keep-Alive");
output.println("");
output.flush();
String line;
File file = new File("/sdcard/aaa.png");
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fileOut = new FileOutputStream(file);
System.out.println("Getting first file");
while ((line = input.readLine()) != null) {
System.out.println(line);
fileOut.write(line.getBytes());
}
System.out.println("First file finished");
fileOut.flush();
fileOut.close();
output.println("GET /way/images/profile/1231 HTTP/1.1");
output.println("Host: 192.168.1.2");
output.println("User-Agent: Java");
output.println("Accept: */*");
output.println("Connection: Keep-Alive");
output.println("");
output.flush();
file = new File("/sdcard/aaa1.png");
if (!file.exists()) {
file.createNewFile();
}
fileOut = new FileOutputStream(file);
System.out.println("Getting second file");
while ((line = input.readLine()) != null) {
System.out.println(line);
fileOut.write(line.getBytes());
}
System.out.println("Second file finished");
fileOut.flush();
fileOut.close();
input.close();
output.close();
}
Log.d("ClientActivity", "C: Closed.");
} catch (Exception e) {
Log.e("ClientActivity", "C: Error", e);
connected = false;
}
finally {
try {
Log.d("ClientActivity", "Socket: Closed.");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Благодаря ...
(1) Определите, что «не работает для меня». (2) Вы имеете в виду, как повторно использовать * порт? * (3) Тестирование 'Socket.isConnected()' следующей строки после 'Socket.connect()' бессмысленно. Если бы он не был связан, он бы выбросил исключение, чтобы вы никогда туда не попали. – EJP
(1) Я использую setReuseAddress (true), но не могу использовать повторное использование сокета после первого ответа с сервера (сервер не отправляет второй ответ). (2) Я хочу подключиться к повторному подключению (возможно, к порту), (3) Спасибо, я уже проверил код .. – Andranik
Спасибо, теперь, пожалуйста, определите 'can not reuse socket'. Что вы подразумеваете под «повторным использованием»; каково ваше ожидание; и что происходит вместо этого? – EJP