1

私はnagaを使用して非同期ソケットプログラミングを行っています。

ただし、Socketオブジェクトに任意のデータを添付できる必要があります。

たとえば、私は次のようなコードを持っています:

service = new NIOService();
// Server is JSONObject
NIOSocket socket = service.openSocket(Server.getString("ip"), Server.getInt("port"));
??? Add mydata to socket
socket.listen(observer); // See class below
System.out.println(socket.mydata);// get new data


public static class Observer extends SocketObserverAdapter {

        //Called when Socket makes connection
        @Override
        public void connectionOpened(NIOSocket socket) {
            System.out.println(socket.mydata); // get data
            socket.mydata = "yay!";// set data
        }
}

私が抱えている問題は、Observer.connectionOpenedコールバックでソケットオブジェクトのデータを取得および設定し、後でアクセスできるようにする必要があることです。

オブジェクトにデータを追加する方法はおそらくないことを理解していますが、データをオブジェクトに関連付けて、データを渡し、データにアクセス(および変更)できるようにするための最良の方法は何ですか?

クラスコードを再コンパイルして変数をクラスに追加することはいつでもできますが、それは非常にハックなようで、避けようとしています。

注:私はJavaプログラミングにはかなり慣れていませんが、プログラミング全般には慣れていません。

4

1 に答える 1

2

頭に浮かぶ2つのアプローチは次のとおりです。

情報を運ぶクラスでソケットをラップします

class MySocketWithData {
    private final Socket theSocket;
    private String myData;
    ....
}

Mapまたは、気になる情報を保持するaを維持します。

private final Map<Socket, MyCoolData> socketMap = new ConcurrentHashMap<>();
public void doSomething(Socket sock) {
    MyCoolData data = socketMap.get(sock);
}

私はおそらく最初のものを好むでしょう。Socket2つ目は、インスタンスを自分自身に渡す必要があり、独自のクラスを置き換えることができない場合に適しています。

于 2012-11-28T02:45:14.970 に答える