2012-03-02 6 views
1

Я пытаюсь отправить несколько данных с сервера на клиент с помощью TCP. Я хочу создать только одно TCP-соединение для всего сеанса. Как мне это сделать?Java, поддерживающий постоянное 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 

Я не закрывать сокеты и потоки с обеих сторон во время сеанса жив.

Update Вот мой фрагмент кода: Client

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 
+3

Опубликовать соответствующие фрагменты кода - сложно сделать предложения по невидимому коду. :) – sarnold

+0

Вы писали обеими сторонами, вы можете прикрепить отладчик к серверу и посмотреть, что произойдет, когда поступит второй запрос? –

+0

Выложили необходимые фрагменты кода и вывод отладчика :) – shyamsundar2007

ответ

2

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

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

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

+0

Спасибо большое! это действительно проблема с моим кодом. - Принял у меня пару часов отладки, чтобы узнать это! – shyamsundar2007