如何在一个python cod中运行两个服务器

2024-09-24 02:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在一个python代码下面做两个udp监听服务器的代码

import threading
import time
import socket

class udpreceive:
      def __init__(self,port,ip):
           self.port = port
           self.ip = ip
           self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
           self.sock.bind((self.ip, self.port))

      def startserver(self):
           while True:
           time.sleep(1)
           data, addr = self.sock.recvfrom(1024)
           print (data)

server1 = udpreceive(514,"192.168.1.5")
s1 =  threading.Thread(target=server1.startserver())

server2 = udpreceive(515,"192.168.1.5")
s2 =  threading.Thread(target=server2.startserver())

s2.start()
s1.start()

这是udp发送方1的客户端代码

^{pr2}$

这是发送者2的客户端代码

import socket
import time
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
counter =0
while True:
   send_data = "hellow world server2 :- "+ str(counter)
   sock.sendto(send_data.encode(), ("192.168.1.5", 514))
   print (send_data)
   counter +=1

当我运行接收代码时,它只显示发送方1的数据。只启动发送方2并启动接收代码,但不显示任何发送方2发送数据,但我启动发送方1接收代码显示发送方1数据。在

我做错什么了?我需要在接收程序中显示发送方1和发送方2的数据

我是oop和socket编程的新手 谢谢


Tags: 代码importselfipsenddatatimeport
1条回答
网友
1楼 · 发布于 2024-09-24 02:21:49

在线程模块中,“target”关键字参数不应包含括号, 见How NOT to wait for a thread to finish in Python。它应该是:

threading.Thread(target=server1.startserver)

然后,两个UDP服务器线程应启动,然后连接,因为公平地共享CPU资源很重要(尤其是在使用无限循环时)。在

服务器的代码可以是:

^{pr2}$

同时,您可能需要将发送方2中的代码更改为:

^{3}$

相关问题 更多 >