이 글에서는 주로 select를 사용하여 소켓 전이중 비동기 통신 기능을 구현하는 Python 네트워크 프로그래밍을 소개합니다. 여기 있는 모든 사람과 공유합니다. 필요한 친구가 참조할 수 있습니다.
이 글에서는 select를 사용하여 구현하는 Python 네트워크 프로그래밍의 예를 설명합니다. 소켓 전이중 비동기 통신 기능. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
이전 기사 "Python 네트워크 프로그래밍에서 TCP 소켓의 간단한 사용법"에서 TCP 클라이언트와 서버 간의 통신을 구현했지만 기능이 매우 제한되어 있습니다. 및 메시지 수신 메시지는 동시에 보낼 수 없습니다.
다음으로 전이중 통신(언제든지 정보를 주고받을 수 있음)을 구현하기 위해 이 모듈을 선택하겠습니다. 물론 멀티스레딩으로도 완료할 수 있다는 이야기는 나중에 하겠습니다.
그럼 셀렉트란 무엇일까요?
select - 단일 스레드 네트워크 서버 프로그램에서 다중 소켓 연결을 관리합니다.
select의 프로토타입은 (rlist, wlist, xlist[, timeout])입니다. 여기서 rlist는 읽기를 기다리는 개체이고 wlist는 개체입니다. 기록 대기 중, xlist는 예외를 기다리는 객체이고, 마지막 객체는 선택적 객체이며, 대기 시간을 지정하며, 단위는 s입니다. 시간 초과 중에 객체가 준비되면 반환 값은 빈 목록이 됩니다.
폴링을 사용하여 비동기 통신을 달성합니다. select()
#!/usr/bin/python 'test TCP server' from socket import * from time import ctime import select import sys HOST = '' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.listen(5) input = [tcpSerSock, sys.stdin] #input是一个列表,初始有欢迎套接字以及标准输入 while True: print 'waiting for connection...' tcpCliSock, addr = tcpSerSock.accept() print '...connected from:',addr input.append(tcpCliSock) #将服务套接字加入到input列表中 while True: readyInput,readyOutput,readyException = select.select(input,[],[]) #从input中选择,轮流处理client的请求连接(tcpSerSock),client发送来的消息(tcpCliSock),及服务器端的发送消息(stdin) for indata in readyInput: if indata==tcpCliSock: #处理client发送来的消息 data = tcpCliSock.recv(BUFSIZ) print data if data=='88': input.remove(tcpCliSock) break else: #处理服务器端的发送消息 data = raw_input('>') if data=='88': tcpCliSock.send('%s' %(data)) input.remove(tcpCliSock) break tcpCliSock.send('[%s] %s' %(ctime(), data)) if data=='88': break tcpCliSock.close() tcpSerSock.close()
#!/usr/bin/python 'test tcp client' from socket import * from time import ctime import select import sys HOST = 'localhost' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST, PORT) tcpCliSock = socket(AF_INET, SOCK_STREAM) tcpCliSock.connect(ADDR) input = [tcpCliSock,sys.stdin] while True: readyInput,readyOutput,readyException = select.select(input,[],[]) for indata in readyInput: if indata==tcpCliSock: data = tcpCliSock.recv(BUFSIZ) print data if data=='88': break else: data = raw_input('>') if data=='88': tcpCliSock.send('%s' %(data)) break tcpCliSock.send('[%s] %s' %(ctime(), data)) if data=='88': break tcpCliSock.close()
Python 네트워크 프로그래밍에서 TCP 소켓의 간단한 사용법
위 내용은 Python 네트워크 프로그래밍은 select를 사용하여 소켓 전이중 비동기 통신 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!