2009-03-19 4 views
0

ソケット接続で2つの異なるパッケージでクライアントからサーバーにジョブ(整数配列)を送信する際に問題が発生しました。どんなアイデアですか?Javaソケットプログラミングで、クライアントからサーバーまで整数配列を送受信するにはどうすればよいですか?

私の質問が十分明確でない場合は、さらに説明できます。

+0

どのような問題がありますか?そして「パッケージ」は何を意味しますか? –

+0

違反コードの例を投稿してください。それはあなたに指導を与える上で大いに役立ちます。 –

+0

2つの異なるパッケージが必要なことはどういう意味ですか?あなたはパケットを意味しますか?その場合は、パケットの数やサイズについて心配する必要があります。 –

答えて

2

配列として送信する必要がありますか?それはプロセス全体を複雑にします。なぜそれをCollectionやListの中に入れないのですか?すなわち:

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



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

あなたのタイトルに質問に答えるために、私はDataOutputStreamBufferedOutputStreamSocketOutputStreamをラップし、繰り返し後者のwriteInt()メソッドを使用します。またはDataOutputStreamの代わりにObjectOutputStreamを使用し、配列をobjOutStream.writeObject(theArray)にシリアル化することもできます。もう一方の端をもう一度読むには、(1)DataInputStreamSocketInputStreamをラップし、readInt()を繰り返し使用するか、または(2)を使用してreadObject()を使用してください。

(あなたが他の言語と相互運用する必要がない場合は、Object*Streamはあなたに簡単です)

+0

申し訳ありませんあなたはコードまたは擬似コードに送信してください答えを翻訳してより技術的になることができますか? – efe

-3

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

または

List a=new List() 

を使用して、我々は、サーバーに送信することができます

0

リンク上でこのデータを送信するためにどのプロトコルを使用していますか? 出力ストリームにシリアル化できるオブジェクトに配列をラップすることができます。

TCP:この場合は非常に簡単です。トランスポートレイヤーはオブジェクトの断片化を処理し、リンクのもう一方の端でオブジェクトを正しく取得します。

UDP:状況は少し複雑になる可能性があります。シリアル化しようとしているオブジェクトがUDPバッファ(バイト数)より大きい場合は、データを取得できないことがあります。このような状況では、デフォルトのUDPバッファサイズよりも小さいチャンクでデータを送信できます。

よろしく、

関連する問題