Saya menulis klien yang pada dasarnya hanya membuka soket dan mengirim konten melalui koneksi. (kontennya mengikuti protokol Http)
Masalah yang saya hadapi berkaitan dengan pertanyaan - bagaimana dan kapan saya harus menutup koneksi. Masalahnya adalah koneksi terkadang ditutup terlalu dini ("FIN" dikirim ke server sebelum server menjawab).
dalam hal ini jawaban server hilang.
Saya mencoba menggunakan Thread.sleep sebelum menutup koneksi tetapi sepertinya tidak ada yang mempengaruhi waktu antara konten dikirim dan pesan "FIN" dikirim. (dilihat di Wireshark)
Jawabannya kadang sampai kadang tidak (kondisi balapan).
Bagaimana cara menunda pesan "FIN" agar saya tidak ketinggalan respons server?
saya menambahkan kelas yang relevan. Fungsi yang relevan adalah sendContentOverSocket
public class SocketClient {
private String hostName;
private int portNumber;
private Socket ConnectionSocket;
public void init(String hostName, int portNumber){
this.hostName = hostName;
this.portNumber = portNumber;
this.ConnectionSocket=createSocketConnection();
}
private Socket createSocketConnection() {
Socket socket = null;
try {
socket = new Socket(this.hostName, this.portNumber);
return socket;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return socket;
}
public void sendContentOverSocket(String content) {
try {
PrintWriter out = new PrintWriter(
ConnectionSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(
ConnectionSocket.getInputStream()));
out.print(content);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.close();
in.close();
ConnectionSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}