gpt4 book ai didi

python - 使用 select() 监听 tcp 和 udp 消息

转载 作者:可可西里 更新时间:2023-11-01 02:33:42 46 4
gpt4 key购买 nike

我只在尝试这段代码时收到 TCP 消息:

from socket import *
from select import select

def read_tcp(s):
while True:
client,addr = s.accept()
data = client.recv(8000)
client.close()
print "Recv TCP:'%s'" % data

def read_udp(s):
while True:
data,addr = s.recvfrom(8000)
print "Recv UDP:'%s'" % data

def run():
host = ''
port = 8888
size = 8000
backlog = 5

# create tcp socket
tcp = socket(AF_INET, SOCK_STREAM)
tcp.bind(('',port))
tcp.listen(backlog)

# create udp socket
udp = socket(AF_INET, SOCK_DGRAM)
udp.bind(('',port))

input = [tcp,udp]

while True:
inputready,outputready,exceptready = select(input,[],[])

for s in inputready:
if s == tcp:
read_tcp(s)
elif s == udp:
read_udp(s)
else:
print "unknown socket:", s

if __name__ == '__main__':
run()

客户端是这样的:

from socket import *

def send_tcp():
s = socket(AF_INET,SOCK_STREAM)
s.connect(('localhost',8888))
data="TCP "*4
s.send(data)
s.close()

def send_udp():
s = socket(AF_INET,SOCK_DGRAM)
data="UDP "*4
s.sendto(data, ('localhost',8888))
s.close()

if __name__ == '__main__':
send_tcp()
send_udp()

最佳答案

  1. 去掉 read_tcp() 和 read_udp() 中的“while”循环。 select() 循环是您唯一需要的循环:它将根据需要经常调用 read_XXX() 方法。 read_XXX() 方法应该只处理一个事件。

  2. 您的 read_tcp() 方法应分为两部分:一部分用于接受套接字并将其添加到选择集中,另一部分用于读取已接受的套接字。相应地调整选择循环。

关于python - 使用 select() 监听 tcp 和 udp 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5160980/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com