2009-03-19 3 views
0

소켓 연결을 통해 서로 다른 두 패키지의 클라이언트에서 서버로 작업 (정수 배열)을 보내는데 문제가 있습니다. 어떤 아이디어라도 제발?Java 소켓 프로그래밍에서 클라이언트에서 서버로 정수 배열을 보내고받는 방법은 무엇입니까?

제 질문에 대한 설명이 충분하지 않은 경우 추가 설명이 가능합니다.

+0

무슨 문제입니까? 그리고 "패키지"는 무엇을 의미합니까? –

+0

문제 코드의 예를 게시하십시오. 그것은 당신에게 지침을주는 데 엄청난 도움이 될 것입니다. –

+0

두 개의 다른 패키지가 필요하다는 것은 무엇을 의미합니까? 패킷을 의미합니까? 그렇다면 패킷 수 또는 크기에 대해 걱정할 필요가 있습니다. –

답변

2

배열로 보내야합니까? 전체 과정을 복잡하게 만듭니다. 콜렉션이나 일종의 List로 포장하지 않으시겠습니까? 즉 :

ObjectOutputStream oos = new ObjectOutputStream(...); 
oos.writeObject(integerCollection); 



ObjectInputStream ois = new ObjectInputStream(...); 
Collection integerCollection = (Collection)ois.readObject(); 
4

가 나는 DataOutputStreamBufferedOutputStream에서 SocketOutputStream 포장 반복 후자의 writeInt() 방법을 사용, 제목의 질문에 대답합니다. 또는 DataOutputStream 대신 ObjectOutputStream을 사용하고 배열을 objOutStream.writeObject(theArray)으로 직렬화 할 수 있습니다. 다른 쪽에서 다시 읽으려면 SocketInputStream을 (1) DataInputStream으로 감싸고 readInt()을 반복적으로 사용하거나 (2) 을 사용하고 readObject()을 사용합니다.

+0

죄송합니다. 귀하가 보내 주신 답변을 코드 또는 의사 코드로 번역하여 좀 더 기술적으로 기술 할 수 있습니까? – efe

-3

List a=new List() 

우리가 서버

에게 보낼 수

ArrayList a=new ArrayList(n) //n represents size 

또는

을 사용 (당신은 Object*Stream 당신에 쉽게 다른 언어와 상호 운용 할 필요가없는 경우)
0

링크를 통해이 데이터를 전송하기 위해 사용하는 프로토콜은 무엇입니까? 배열을 출력 스트림에 직렬화 할 수있는 객체로 래핑 할 수 있습니다.

TCP :이 경우 매우 간단해야합니다. 전송 계층은 개체의 조각화를 처리하고 링크의 다른 끝에서 개체를 가져옵니다.

UDP : 상황이 조금 복잡 할 수 있습니다. 직렬화하려는 객체가 UDP 버퍼보다 ​​크면 (바이트 단위로) 데이터를 가져올 수 없습니다. 이 경우 기본 UDP 버퍼 크기보다 작은 청크로 데이터를 보낼 수 있습니다.

감사합니다.

관련 문제