Я пытаюсь реализовать Window-сокет с помощью Python.Программирование оконных сокетов с 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
}
}
}
В приведенном выше коде, я не мог» t найти эквивалент Python для WSAGETSELECTEVENT.
Для FD_ACCEPT, FD_READ, я мог бы найти их в win32file пакете (из pywin32 ОМТОВ)
Наконец, причина, почему я пытаюсь реализовать этот сокет Окна программирования является то, что версия C++ оконной розетки server (выше) не блокирует приложение my, но встроенный select.select Python блокирует. Поэтому я пытаюсь проверить, могу ли я переносить версию C++ на Python и посмотреть, работает ли она.
Редакция: Я хотел бы уточнить, что сокет-сервер работает как «пробка в» к существующим C++ программы, , которая не поддерживает многопоточность.
Серверу сокетов необходимо ждать (неограниченно) клиентов для подключения, чтобы он постоянно слушал. Таким образом, используя обычный сокет Python или select.select повлечет за собой цикл while (или иначе как он может работать как сервер, постоянно прослушивающий события? Пожалуйста, исправьте меня, я ошибаюсь), что блокирует основную программу.
Как-то, используя обратный вызов сервера Socket окна выше, основная программа не блокируется. И это основная причина, когда я пытаюсь перенести ее на Python.
Сервер сокетов предпочтительно находится на Python, потому что многие связанные с ним библиотеки, написанные на Python, написаны.
Большое спасибо.
Если вы используете нулевой тайм-аут для 'select.select', то он не будет блокироваться. –
@JoachimPileborg Спасибо: это сделало бы выбор не блокирующим. Однако для моей цели сервер по-прежнему блокирует основную программу, поскольку нам нужен цикл while вне select.select. Я отредактировал свой вопрос, чтобы уточнить мою цель. Благодарю. –