Java поддерживает постоянное соединение TCP - PullRequest
1 голос
/ 02 марта 2012

Я пытаюсь отправить несколько данных с сервера на клиент, используя TCP. Я хочу создать только одно TCP-соединение для всей сессии. Как мне это сделать?

Я пробовал код со следующим потоком, но программа останавливается после получения первого ответа.

Клиентская сторона

1.create sockets and streams
2.send request for first data
3.wait for response from server
4.send next request <----------- server doesn't seem to handle this request
5.get next response from server

Серверная сторона

1.Create server socket and wait for incoming connections
2.Parse incoming request
3.Send response
4.Parse next request
5.Send next response

Я не закрываю сокеты и потоки с обеих сторон, пока сеанс жив.

Обновление Вот мой фрагмент кода: Клиент

public void processRequest() throws Exception {

    Socket tempSocket = new Socket("0.0.0.0", 6782);

    String requestLine = "This is request message 1" + CRLF;

    DataOutputStream outToServer = new DataOutputStream(tempSocket.getOutputStream());            
    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(tempSocket.getInputStream())); 

    outToServer.writeBytes(requestLine + CRLF);

    String serverResponse = inFromServer.readLine();
    System.out.println(serverResponse);

    requestLine = "This is request message 2" + CRLF;

    outToServer.writeBytes(requestLine + CRLF);

    serverResponse = inFromServer.readLine();
    System.out.println(serverResponse);

    outToServer.close();
    inFromServer.close();
    tempSocket.close();
}

Сервер

public void processRequest() throws Exception {

    createConnections();

    String requestLine = inFromClient.readLine();
    System.out.println(requestLine);

    String responseLine = "This is the response to messsage 1";
    outToClient.writeBytes(responseLine + CRLF);

    requestLine = inFromClient.readLine();
    System.out.println(requestLine);

    responseLine = "This is the response to message 2";
    outToClient.writeBytes(responseLine + CRLF);
}

выход

Клиент:

This is the response to messsage 1
This is the response to message 2
BUILD SUCCESSFUL (total time: 1 second)

Сервер:

This is request message 1

null
java.net.SocketException: Broken pipe

1 Ответ

2 голосов
/ 11 мая 2012

Я думаю, что проблема в коде вашего клиента. Вы написали:

    String requestLine = "This is request message 1" + CRLF;
    .....
    outToServer.writeBytes(requestLine + CRLF);

Вы добавляете CRLF в requestLine и добавляете его снова, когда отправляете на сервер. Убедитесь, что добавление CRLF только один раз для каждого сообщения, которое вы хотите отправить, будет вести себя так, как вы хотите.

...