Aynch Socket Connection - передача параметров для начала принятия - PullRequest
0 голосов
/ 23 октября 2018

Я работаю над программированием асинхронных сокетов и использую этот код

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

Я динамически создаю этих слушателей (Новый экземпляр Socket Listener на каждом порту, передавая другой портномера и мне нужно передать соответствующую информацию для каждого номера порта, когда сокет прослушивает, чтобы я мог использовать эту информацию, когда я получаю данные.

в основном мой метод прослушивания запуска будет выглядеть как

public static void StartListening(string addInfo) 

Я понимаю, как передать дополнительный параметр для функции Asynch после ссылки на это

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

, но в этом коде сокета мы уже передаем сокет в качестве параметра (слушатель)

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

Как добавить еще один дополнительный параметр, который мне нужно передать в BeginAccept ?

Какие еще способы заставить это работать, так как у нас уже есть сокетОбъект (слушатель), отправленный в качестве параметра.

или как еще можно динамически наращивать серверы сокетов с разными портами и кое-как, как я могу отобразитьдополнительная информация для каждого сокета

1 Ответ

0 голосов
/ 23 октября 2018

Есть несколько способов справиться с этим, учитывая, что вы не можете изменить тип объекта состояния в вызове 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...