0

私はJavaでスプレッドシートアプリケーションを持っています、そしてそれが提供する機能の1つ(私が開発した)はシート共有です。基本的に、アプリにはサーバーコードとクライアントコードの両方があるため、誰でもクライアントまたはサーバーになることができます。サーバーであるユーザーが共有を作成し、IPを指定すると、共有が作成されてアクティブになり(最良のシナリオ)、サーバーはIPと選択されたポートでクライアントをリッスンします。

自動検出には、UDPブロードキャストを介してDatagramSocketsを使用していますが、「実際の通信」はTCPベースです(クライアントがすでに接続されている後)。ただし、そのUDPソケットを介して送信しようとしていますがList、その方法がわかりません。これListには、クライアントに送信する必要があるサーバー上のアクティブな共有が含まれているため、クライアントは何に接続できるかがわかります。

こんなふうになります:

クライアント->ネットワークにパケットを送信してアクティブなサーバーを探します->サーバーはパケットをリッスンして送り返します。このパケットはList(これらの種類のソケットを介して送信できる場合)である必要があります。

誰かが私の質問に光を当てることができますか?ありがとうございました。

4

1 に答える 1

3

送信する前にリストをbyte[]に変換し、Javaシリアル化を使用して受信者のリストに戻すことができます。

    // Sender
    List list = new ArrayList();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ObjectOutputStream outputStream = new ObjectOutputStream(out);
    outputStream.writeObject(list);
    outputStream.close();

    byte[] listData = out.toByteArray();


    // Reciever
    ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(listData));
    list = inputStream.readObject();

リストに入れるすべてのオブジェクトがSerializableを実装していることを確認してください。

于 2012-06-13T10:44:59.573 に答える