Aynch套接字连接-传递参数以开始接受

时间:2018-10-23 17:03:21

标签: .net sockets

我正在从事异步套接字编程,并且正在使用此代码

https://docs.microsoft.com/en-us/dotnet/framework/network-programming/asynchronous-server-socket-example

Am动态创建这些侦听器(通过传递不同的端口号在每个端口上创建Socket侦听器的新实例,我需要在套接字侦听时传递每个端口号的相关信息,以便在接收数据时可以使用该信息。

基本上,我的“开始”监听方法类似于

public static void StartListening(string addInfo) 

我理解在参考此方法后如何为Asynch函数传递附加参数

https://stackoverflow.com/a/9192678/1481690

但是在此套接字代码中,我们已经将套接字作为参数(监听器)传递了

listener.BeginAccept(   
                    new AsyncCallback(AcceptCallback),  
                    listener ); 

如何添加需要传递给 BeginAccept 的其他参数?

由于已经有一个套接字(侦听器)对象作为参数发送,我还有什么其他方法可以使它工作?

或者我还可以如何动态增加具有不同端口的套​​接字服务器,以及如何将附加信息映射到每个套接字

1 个答案:

答案 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);