Сокеты C #: Как вы обрабатываете сокеты в C # .NET так, как они обрабатываются в VB6 или Delphi (управляемых событиями)? - PullRequest
2 голосов
/ 07 января 2009

Сокеты C #: как вы обрабатываете сокеты в C # .NET так, как они обрабатываются в VB6 или Delphi (управляемых событиями)?

На VB6 или Delphi при создании сокета у вас были события onconnect, onreceive и onerror, помещенные в основной файл кода, как бы я их повторил?

Ответы [ 4 ]

3 голосов
/ 07 января 2009

У вас нет точно такого же поведения, как в VB6 / Delphi, и у вас есть методы и события Async для выполнения подобных задач, например: Клиент AsyncTCP

1 голос
/ 08 января 2009

Краткий ответ: с использованием методов многопоточности.

Длинный ответ заключается в том, что события на самом деле являются просто сигналом, генерируемым другим кодом, который постоянно проверяет определенный набор обстоятельств. Например, очень простая часть кода, ответственная за вызов события DataAvailable, может выглядеть так:

While Socket Is Connected
   If Data Is Available Raise Event DataAvailable
Loop

.Net-библиотека имеет класс Socket, который можно обернуть классом, который вы проектируете так, чтобы он вел себя немного больше, чем класс Winsock, который был доступен в VB6. Как только вы изучите документацию для класса Socket и узнаете, как создавать пользовательские события для класса, нетрудно представить, как может быть разработана такая оболочка. Реальное препятствие для большинства разработчиков из VB6 (и для меня) заключается в том, что вы должны немного узнать о многопоточных приложениях, чтобы они работали должным образом.

Вероятно, вы можете найти такую ​​обертку, немного покопавшись, но я настоятельно рекомендую вам хотя бы попытаться написать свою собственную. Поскольку одноядерные машины быстро уйдут в прошлое, опыт использования многопоточных технологий станет требованием любого порядочного программиста.

1 голос
/ 07 января 2009

Вы должны прочитать о классе TcpClient, сетевое кодирование не так просто перетаскивать, как в vb6, но у вас намного больше контроля над протоколом.

Кроме того, существует довольно много библиотек клонов WinSock, которые работают и взаимодействуют примерно так же, как и в vb6.

0 голосов
/ 07 января 2009

Нет такого класса, доступного в .Net framework afaik.

Довольно просто создать класс с OnConnect, OnReceive и т. Д., Который обернет класс сокета. И если вы не имеете опыта в создании классов, которые отправляют события, это очень хороший опыт обучения.

Это было первое, что я сделал, когда перешел с VB6 на .Net и потребовал "winsock".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...