2012-03-02 5 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 

나는 소켓을 닫고 세션이 살아있는 동안 양쪽에 스트림하지 않습니다. 여기에 업데이트

내 코드입니다 : 클라이언트

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) 
,363,210

서버 :

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를 requestLine에 추가하고 서버에 보낼 때 다시 추가합니다. 보낼 메시지 당 한 번만 CRLF를 추가하면 원하는대로 작동합니다.

+0

고마워요! 그게 실제로 내 코드의 문제였습니다 .- 그것을 발견하기 위해 디버깅을하는 데 두 시간이 걸렸습니다! – shyamsundar2007