Java поддерживает постоянное TCP-соединение

Я пытаюсь отправить несколько данных с сервера на клиент, используя 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

person shyamsundar2007    schedule 02.03.2012    source источник
comment
Публикуйте соответствующие фрагменты кода — трудно делать предложения по невидимому коду. :)   -  person sarnold    schedule 02.03.2012
comment
Вы написали обе стороны, наверняка можно прицепить к серверу отладчик и посмотреть, что будет, когда придет второй запрос?   -  person Jim Garrison    schedule 02.03.2012
comment
Опубликовали необходимые фрагменты кода и вывод отладчика :)   -  person shyamsundar2007    schedule 02.03.2012


Ответы (1)


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

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

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

person Riza    schedule 11.05.2012
comment
Большое спасибо! это действительно была проблема с моим кодом - мне потребовалось пару часов отладки, чтобы выяснить это! - person shyamsundar2007; 01.07.2012