【发布时间】:2015-05-26 16:10:34
【问题描述】:
我编写了一个客户端,它基本上只是打开一个套接字并通过连接发送内容。 (内容遵循Http协议)
我面临的问题是关于这个问题 - 我应该如何以及何时关闭连接。 问题是连接有时过早关闭(“FIN”在服务器应答之前发送到服务器)。
在这种情况下,服务器的答案丢失了。
我尝试在关闭连接之前使用 Thread.sleep ,但似乎没有什么影响发送内容和发送“FIN”消息之间的时间。 (在 Wireshark 中查看)
答案有时会到达,有时不会(竞争条件)。
如何延迟“FIN”消息,以免错过服务器的响应?
我添加了相关的类。相关函数是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();
}
}
}
【问题讨论】:
-
@user1274820 除非您做错了什么,否则套接字不会“因错误而关闭”。
标签: java sockets tcp tcpclient