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

想到的两种方法是:

将 Socket 包装在一个携带信息的类中

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

或者,维护一个Map包含您关心的信息的信息。

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

我可能更喜欢第一个。Socket如果您需要在自己周围传递实例并且不能替换您自己的类,则第二种方法会更合适。

于 2012-11-28T02:45:14.970 回答