Сервер сокетов UDP, 3 сокета прослушивания одновременно [Python] - PullRequest
0 голосов
/ 21 мая 2018

Я хотел бы написать UDP-сервер на Python, который бы одновременно имел 3 разных сокета, прослушивающих разные порты.Основная задача сервера - отправлять клиентам постоянный текст, различный для разных сокетов.

Я написал следующий код:

import socket
import thread

def create_socket_server(host, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind((host, port))
    return s


def run_socket(s, secret):
    while True:
        (data, addr) = s.recvfrom(1024)
        s.sendto(secret, addr)


def run_server():
    s1 = create_socket_server('127.0.0.1', 2000)
    s2 = create_socket_server('127.0.0.1', 3000)
    s3 = create_socket_server('127.0.0.1', 4000)

    while 1:
        thread.start_new_thread(run_socket, (s1, "A"))
        thread.start_new_thread(run_socket, (s2, "B"))
        thread.start_new_thread(run_socket, (s3, "C"))


if __name__ == "__main__":
    run_server()

Но после того, как я запустил его, он показал, что:

/usr/bin/python2.7 /home/brian/Temp/udp.py
Traceback (most recent call last):
  File "/home/brian/Temp/udp.py", line 29, in <module>
    run_server()
  File "/home/brian/Temp/udp.py", line 24, in run_server
    thread.start_new_thread(run_socket, (s2, "SI"))
thread.error: can't start new thread

Process finished with exit code 1

В чем проблема?

1 Ответ

0 голосов
/ 21 мая 2018

Вы постоянно пытаетесь перезапустить сокеты, так как они попадают в бесконечный цикл while.Удалите «while 1» и вместо этого сделайте ваш цикл внизу скрипта.может даже быть

if __name__ == "__main__":
    run_server()
    while 1:
        time.sleep(1)

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

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