2010-11-23 4 views
2

내가 가지고있는 문제에 대한 정확한 답변을 찾지 못했기 때문에 어쨌든이 질문을 할 것입니다. 실제로 그런 질문을 다시 게시하십시오. 이미 물어 봤는데, 사과드립니다.Java에서 UDP를 사용하여 네트워크를 통해 객체를 전송하는 경우

Java 클래스에 대해 다른 실험실 할당을하고 있습니다. 이번 주 랩을 위해 네트워크를 통해 Message 객체를 보내려면 UDP 서버를 만들어야합니다. 그러면 UDP 클라이언트를 만들어야합니다. 그 메시지. Message 자체는 String 메시지와 String 사용자 이름을 가진 Object입니다. 상당히 임의적이다. 메시지가 Serializable입니다.

이제는 DatagramPacket 내에서 네트워크를 통해 해당 Message Object를 실제로 보내는 방법과 관련하여 문제가 있습니다. 실제 생성자는 바이트 배열, 배열의 크기, InetAddress 및 포트 번호를 넣습니다. 내 마지막 질문은 : 배열의 크기를 알아내는 방법, 그리고 내 메시지를 보낼 바이트로 바꾸는 방법입니까?

답변

7

메시지 클래스를 바이트 배열로 직렬화해야합니다. 이것은 전송하는 바이트 배열이 될 것입니다 (그리고 그 시점에서 크기를 쉽게 얻을 수 있습니다).

클라이언트에서 바이트 배열을 다시 deserialize하여 Message 개체에 넣을 수 있습니다.

Java는 직렬화/직렬화를 처리 할 클래스 세트를 제공하며 직렬화하려는 오브젝트는 "Serializable"인터페이스를 구현해야합니다.

이런 식으로 뭔가가 작동합니다 :

// Serialize to a byte array 
ByteArrayOutputStream bStream = new ByteArrayOutputStream(); 
ObjectOutput oo = new ObjectOutputStream(bStream); 
oo.writeObject(messageClass); 
oo.close(); 

byte[] serializedMessage = bStream.toByteArray(); 

그리고 수신 측에

:

ObjectInputStream iStream = new ObjectInputStream(new ByteArrayInputStream(recBytes)); 
Message messageClass = (Message) iStream.readObject(); 
iStream.close(); 

주, 당신은 클라이언트와 서버 사이에 공유되는 공통 인터페이스를 만들어야합니다,이 뜻을 페이로드의 직렬화/직렬화를 쉽게 할 수 있습니다.

+0

아하! 이것은 완벽하고 정확하게 내가 찾고 있던 것입니다! 정말 고맙습니다! –

관련 문제