Как установить связи принятия сервера от нескольких портов?

Нет того, который действительно применим.
я обсуждаю некоторые вопросы в моем , ответ на Является там php библиотекой для проверки адреса электронной почты? , это обсуждено также в распознавание Regexp адреса электронной почты трудно?

Короче говоря, не ожидайте, что единственный, применимый regex сделает надлежащее задание. И лучший regex проверит синтаксис, не законность электронного письма (jhohn@example.com корректен, но это, вероятно, возвратится...).

5
задан Orjanp 5 August 2009 в 12:56
поделиться

2 ответа

Я не любитель питонов, но функция, которая вас интересует, - это «выбрать». Это позволит вам наблюдать за несколькими сокетами и отключаться при возникновении активности на любом из них.

Вот пример python, который использует select .

7
ответ дан 13 December 2019 в 05:39
поделиться

Если вы действительно хотели быть ленивым (с точки зрения программиста , а не с точки зрения оценки), вы можете установить тайм-аут для блокирующего чтения и просто перебрать все свои Розетки; если истекает тайм-аут, данные недоступны. Функционально это похоже на то, что делает select , но он забирает этот контроль у ОС и помещает его в ваше приложение.

Конечно, это означает, что по мере уменьшения времени сна , ваша программа приблизится к 100% загрузке ЦП, поэтому вы не будете использовать ее в производственном приложении. Хотя для игрушки это нормально.

Это будет выглядеть примерно так: (не тестировалось)

def server():
    import sys, os, socket

    port = 11116
    host = ''
    backlog = 5 # Number of clients on wait.
    buf_size = 1024
    NUM_SOCKETS = 10
    START_PORT = 2000

    try:
            socket.setdefaulttimeout(0.5) # raise a socket.timeout error after a half second
            listening_sockets = []
            for i in range(NUM_SOCKETS):
                listening_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                listening_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 
                listening_socket.bind((host, START_PORT + i)) 
                listening_socket.listen(backlog)
                listening_sockets.append(listening_socket)
    except socket.error, (value, message):
            if listening_socket:
                    listening_socket.close()
            print 'Could not open socket: ' + message
            sys.exit(1)

    while True:
            for sock in listening_sockets:
                try:
                    accepted_socket, adress = sock_socket.accept()

                    data = sock.recv(buf_size)
                    if data:
                            sock_socket.send('Hello, and goodbye.')
                    sock.close()
                except socket.timeout:
                    pass

    server()
2
ответ дан 13 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: