2012-04-08 4 views
0

클라이언트와 서버간에 개체가 튀는 데 문제가 있습니다.클라이언트 서버 통신 문제가 발생했습니다.

개체를 만듭니다. 일부 필드를 업데이트하십시오. 서버로 보내기.

SomeObject thisObject = new SomeObject(); 
thisObject.setSomeValue(13);   // update object to be sent 

PrintStream toServer = new PrintStream(sock.getOutputStream()); 

ObjectOutputStream oos = new ObjectOutputStream(toServer); 

oos.writeObject(thisObject); 
oos.close(); 

toServer.println(oos);    // send object to server 
toServer.flush(); 

오른쪽이 후 (이 부분 작품), 더 서버는 어떤 값을 업데이트 1919로 설정;

ObjectInputStream objFromClient = new ObjectInputStream(new BufferedInputStream(
     sock.getInputStream())); 

Served thisObject = (Served) objFromClient.readObject(); 
thisObject.setSomeValue(1919); 

서버는 클라이언트

toClient = new PrintStream(sock.getOutputStream()); 
ObjectOutputStream oos = new ObjectOutputStream(toClient); 

oos.writeObject(thisObject); 

oos.close(); 
objFromClient.close(); 
sock.close(); 

다시 객체를 전송하지만 시간이 다시 클라이언트 측에서 .. 프로그램 객체를 데리러 올 때 소켓 휴일을 제외하고 실패

ObjectInputStream objFromServer = new ObjectInputStream(
    new BufferedInputStream(sock.getInputStream()));  //java.net.SocketException: Socket is closed 

thisObject = (Served) objFromServer.readObject(); 
.... 

문제를 이해하는 데 도움이되도록

+0

'소켓'을 생성하는 코드를 보여줄 수 있습니까? –

+0

'Socket sock = new Socket (serverName, SERVER_PORT);와 같이 간단하다. – JAM

+1

이것은 아마도 문제는 아니지만 그래도 왜'oos.writeObject (thisObject); oos.close(); ' 및 'toServer.println (oos); toServer.flush();'첫 번째 단계에서? 첫 번째 쌍이 필요하지 않니? 'PrintStream.println()'은 파라미터로서'ObjectOutputStream'을 받아 들일 수 있습니까? –

답변

2

내 생각에 클라이언트에서 보내고받을 때 같은 Socket을 사용하고 있습니다. 클라이언트에서 ObjectOutputStream을 닫으면 이 닫히고 sock이 닫힙니다. 그런 다음 아래에서 다시 사용하려고하면 닫히고 예외가 throw됩니다.

클라이언트 코드에서 리소스를 닫기 전에 트랜잭션이 완료 될 때까지 기다리십시오 (방법은 finally 블록에서 완료해야 함). 또는 대기중인 경우 문제가있는 경우 새 Socket을 대신 사용하십시오.

+0

전화 Paul. 이것은 내가보고있는 정확한 문제인 것으로 보입니다. – JAM

+0

@JAM 기꺼이 도와 드릴 수 있습니다! –

관련 문제