网络:IO多路复用应用-信息输入至文件(select-tcp)

技术文章 7个月前 完美者
1,558 0

标签:io多路复用   描述符   error   div   window   close   his   套接字   sea   

select服务端,同时关注客户端连接,客户端发送和终端输入。将客户端发送和终端输入的内容全都写入到一个文件中

【linux中】

【tcp-file-io-select-server.py】
from
select import select import sys s = socket() s.bind(("127.0.0.1",9999)) s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)#设置端口可立即重用 s.listen(5) rlist = [s,sys.stdin] wlist = [] xlist = [] f = open(file.txt,w) while True: rs,ws,xs = select(rlist,wlist,xlist,3) print("***********") for r in rs: if r is s: c,addr = r.accept() rlist.append(c) elif r is sys.stdin: data = r.readline() f.write(data) f.flush() else: data = r.recv(1024) r.send(b"this is xxxx")# 给连接的套接字回复消息,不回复的话client端的recv会阻塞 if not data: rlist.remove(r) r.close() else: f.write(data.decode()) f.flush() f.close()

tcp-file-io-select-client.py
from socket import * #创建套接字 sockfd = socket() #发起连接 sockfd.connect((127.0.0.1,9999)) while True: #消息收发 msg = input("Msg>>") if not msg: break sockfd.sendall(msg.encode()) data = sockfd.recv(1024) print(data.decode()) sockfd.close()

【windows中】

  注意,在Windows中select中不能使用systdin,

  否则会报错【OSError: [WinError 10038] 在一个非套接字上尝试了一个操作。】

【tcp-file-io-select-server.py】
from
socket import * from select import select import sys s = socket() s.bind(("127.0.0.1",9009)) s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)#设置端口可立即重用 s.listen(5) # rlist = [s,sys.stdin] # win上select不能使用sys.stdin, # 在Windows上,底层选择函数由WinSock库提供,不处理不是源自WinSock的文件描述符 . rlist = [s] wlist = [] xlist = [] f = open(file.txt,w) while True: rs,ws,xs = select(rlist,wlist,xlist,1) print("***********") for r in rs: if r is s: c,addr = r.accept() rlist.append(c) # elif r is sys.stdin: # data = r.readline() # f.write(data) # f.flush() else: data = r.recv(1024) r.send(b"this oj") if not data: rlist.remove(r) r.close() else: print("wanle") f.write(data.decode()) f.flush() f.close() s.close()

【tcp-file-io-select-client.py】
from
socket import * #创建套接字 sockfd = socket() #发起连接 sockfd.connect((127.0.0.1,9009)) while True: #消息收发 msg = input("Msg>>") if not msg: break sockfd.sendall(msg.encode()) data = sockfd.recv(1024) print(data.decode()) sockfd.close()

 

网络:IO多路复用应用-信息输入至文件(select-tcp)

标签:io多路复用   描述符   error   div   window   close   his   套接字   sea   

原文地址:https://www.cnblogs.com/longyuu/p/14238670.html

版权声明:完美者 发表于 2021-01-08 10:29:18。
转载请注明:网络:IO多路复用应用-信息输入至文件(select-tcp) | 完美导航

暂无评论

暂无评论...