Я пытаюсь реализовать сокет окна, используя Python.
В основном все было решено с помощью ctypes.windll.ws2_32 и pywin32 lib.
Однако я не смог выяснить, как перевести следующие коды C ++ в Python, и мне интересно, если кто-нибудь будет любезен помочь:
LRESULT WINAPI AsyncSocketProc(
__in HWND hwnd,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
)
switch(uMsg) {
case WM_CREATE:
//...
case WM_SOCKET: {# this is basically an int constant
switch(WSAGETSELECTEVENT(lParam)){
case FD_ACCEPT:
//accepting new conn
case FD_READ:
//receiving data
}
}
}
В приведенном выше коде я не смог найти эквивалент Python для WSAGETSELECTEVENT.
Для FD_ACCEPT, FD_READ, я могу найти их в пакете win32file (из pywin32 lib)
Наконец, причина, по которой я пытаюсь реализовать это программирование сокетов Windows, заключается в том, что версия сервера сокетов окон C ++ (выше) не блокирует мое приложение, а встроенный в Python select.select блокирует , Поэтому я пытаюсь выяснить, могу ли я перенести версию C ++ на Python и посмотреть, работает ли она.
Редакция:
Я хотел бы уточнить, что сервер сокетов работает как «плагин» для существующей программы C ++ , , которая не поддерживает многопоточность .
Сервер сокетов должен ждать (неопределенно), пока клиенты подключатся , поэтому ему необходимо непрерывно прослушивать.
Поэтому использование обычного Python-сокета или select.select повлекло бы за собой цикл while (или иначе как он может работать как сервер, непрерывно прослушивающий события? Пожалуйста, исправьте меня, я ошибаюсь), что блокировало бы основной программа.
Каким-то образом при использовании обратного вызова сервера Window Socket выше основная программа не блокируется. И это главная причина, пока я пытаюсь перенести его на Python.
Сервер сокетов предпочтительно на Python, потому что многие связанные библиотеки, в которых нуждается сервер, написаны на Python.
Большое спасибо.