编写UDP程序,通过IO复用同时处理标准输入和套接字。当检测到终端有数据输入时读取文本发送给对端;当通过套接字收到对方消息时输出到终端上。
时间: 2023-05-20 11:07:20 浏览: 52
可以使用select来实现IO复用,代码如下:
```python
import socket
import sys
import select
host = 'localhost'
port = 5000
def main():
# 创建套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
s.setblocking(False)
# 注册标准输入和套接字
inputs = [s, sys.stdin]
while True:
# 使用select等待 IO 事件
read, _, _ = select.select(inputs, [], [])
# 处理读事件
for r in read:
if r is s:
# 从套接字读取数据并发送给对端
data, addr = s.recvfrom(1024)
sys.stdout.write(data)
elif r is sys.stdin:
# 从终端读取数据并发送给对端
data = sys.stdin.readline()
s.sendto(data.encode(), (host, port))
if __name__ == '__main__':
main()
```
这个程序使用UDP协议实现了终端和对端之间双向通信,通过select实现了非阻塞IO,可以同时处理标准输入和套接字。