我正在从事异步套接字编程,并且正在使用此代码
Am动态创建这些侦听器(通过传递不同的端口号在每个端口上创建Socket侦听器的新实例,我需要在套接字侦听时传递每个端口号的相关信息,以便在接收数据时可以使用该信息。
基本上,我的“开始”监听方法类似于
public static void StartListening(string addInfo)
我理解在参考此方法后如何为Asynch函数传递附加参数
https://stackoverflow.com/a/9192678/1481690
但是在此套接字代码中,我们已经将套接字作为参数(监听器)传递了
listener.BeginAccept(
new AsyncCallback(AcceptCallback),
listener );
如何添加需要传递给 BeginAccept 的其他参数?
由于已经有一个套接字(侦听器)对象作为参数发送,我还有什么其他方法可以使它工作?
或者我还可以如何动态增加具有不同端口的套接字服务器,以及如何将附加信息映射到每个套接字
答案 0 :(得分:1)
鉴于无法在对BeginAccept()的调用中更改状态对象的类型,有两种方法可以解决此问题。
1:向回调代码路径中注入其他数据:
AdditionalInformation additionalInformation = new AdditionalInformation(whatever);
listener.BeginAccept((asyncResult) => AcceptCallback(asyncResult, additionalInformation), listener);
2:使用关联集合来存储其他信息。在这种情况下,AcceptCallback将返回该集合以检索其他信息:
Dictionary<string, AdditionalInformation> additionalInformationMap = new Dictionary<string, AdditionalInformation>();
AdditionalInformation additionalInformation = new AdditionalInformation(listener, whatever, whateverElse);
additionalInformationMap[MakeKey(listener)] = additionalInformation;
listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);