我在编写客户端服务器应用程序。我想知道结束连接,哪一方应该决定结束它,客户端还是服务器?客户端连接或服务器端?
然后,如果例如客户端做到了,服务器是否应该保持打开状态?
假设我们对每个客户端和服务器下面的代码:
socket = new Socket("127.0.0.1",3000);
........
socket.close();
或
serverSocket = new ServerSocket(3000);
socket = serverSocket.accept();
......
serverSocket.close();
编辑: 根据马特的答案,我锅中我的代码在这里,让看看为什么我的代码不工作:
一般来说,我有一个Jframe程序作为客户端,它将连接到一台服务器,当它打开,我想连接是活着的,因为它se向服务器和服务器发送信息应该对结果做出响应。但如果我不使用从服务器关闭套接字它提供了一个错误,如果我使用,一旦计算之后,关闭连接:
服务器
private static PrintWriter toClient;
private static BufferedReader fromClient;
public static void run() throws IOException, SAXNotRecognizedException, SAXNotSupportedException, ParserConfigurationException, SAXException, XPathExpressionException
{
System.out.println("Server is waiting for connections...");
while(true)
{
openStreams();
processClient();
closeStreams();
}
}
的OpenStream:
public static void openStreams() throws IOException, SAXNotRecognizedException, SAXNotSupportedException, ParserConfigurationException, SAXException, XPathExpressionException
{
serverSocket = new ServerSocket(3000);
socket = serverSocket.accept();
System.out.println("Connected");
toClient = new PrintWriter(socket.getOutputStream(),true);
fromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
Closestearms :
public static void closeStreams() throws IOException
{
fromClient.close();
toClient.close();
socket.close();
serverSocket.close();
System.out.println("Disconnected");
}
我收到的错误如果我删除了closestream();
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at java.net.ServerSocket.<init>(ServerSocket.java:97)
但林困惑,因为如果客户端,然后服务器应该做的** ** socket.close与否?反之亦然 – lonesome 2012-04-01 10:47:33
一旦插座已经在一侧封闭,另将获得异常,如果它试图在其上运行需要连接到开放的方法。无论它是服务器还是客户端都无关紧要;一旦连接打开,从TCP的角度来看,两者都是相同的。 – Mat 2012-04-01 10:52:23
如何阅读我的编辑?谢谢 – lonesome 2012-04-01 11:05:54