Я программирую приложение клиент-сервер. Мне интересно разорвать соединение, какая сторона должна решить разорвать его, клиент или сервер?
Тогда, если, например, клиент сделал это, должен ли сервер оставаться открытым или нет?
Предположим, у нас есть следующие коды для каждого клиента и сервера:
socket = new Socket("127.0.0.1",3000);
........
socket.close();
или
serverSocket = new ServerSocket(3000);
socket = serverSocket.accept();
......
serverSocket.close();
EDIT:
в соответствии с ответом Мэтта, я оставлю здесь свой код и посмотрим, почему мой код не работает:
Как правило, в качестве клиента у меня есть программа 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();
}
}
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)