【发布时间】:2012-04-01 10:39:08
【问题描述】:
我正在编写客户端服务器应用程序。我想结束连接,应该由哪一方决定结束它,客户端还是服务器?
那么如果例如客户端这样做了,服务器是否仍然保持打开状态?
假设我们对每个客户端和服务器都有以下代码:
socket = new Socket("127.0.0.1",3000);
........
socket.close();
或
serverSocket = new ServerSocket(3000);
socket = serverSocket.accept();
......
serverSocket.close();
编辑: 根据马特的回答,我把我的代码放在这里,看看为什么我的代码不起作用:
一般来说,我有一个 Jframe 程序作为客户端,它将连接到服务器,当它打开时,我希望连接处于活动状态,因为它将信息发送到服务器并且服务器应该响应结果。但是如果我不使用从服务器关闭套接字,它会给出一个错误,如果我使用,在一次计算后,它会关闭连接:
服务器
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();
}
}
开放流:
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()));
}
近亲:
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)
【问题讨论】:
标签: java client-server