繁体   English   中英

UDP套接字服务器,一次3个侦听套接字[Python]

[英]UDP socket server, 3 listening sockets at time [Python]

我想用Python写一个UDP服务器,它将有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

问题是什么?

您一直在尝试重新启动套接字,因为它们属于永无止境的“ while”循环。 删除“ while 1”,然后在脚本底部进行循环。 甚至可能是

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

这样,它将启动您的线程,然后继续前进,在这种情况下进入永无休止的睡眠。 举个例子。 希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM