select_server.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author: smoke
# file: select_server.py
# time: 2021/06/14
import socket
import select
sk = socket.socket()
sk.bind(('127.0.0.1',8800))
sk.listen(5)
sk1 = socket.socket()
sk1.bind(('127.0.0.1',6667))
sk1.listen(5)
while True:
r,w,e = select.select([sk,sk1],[],[],5)
for i in r: #[sk1,]
conn,add = i.accept()
print('conn',conn)
print("hellohellohello")
print('r:>>>',r)
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/select_server.py
r:>>> []
r:>>> []
通过IO多路复用实现并发聊天
talk_server.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author: smoke
# file: talk_server
# time: 2021/06/17
import socket
import select
sk=socket.socket()
sk.bind(('127.0.0.1',8800))
sk.listen(3)
while True:
inputs,outputs,errors=select.select([sk,],[],[],5)
for i in inputs:
conn,addr=i.accept()
print(conn)
data=conn.recv(1024)
print(data.decode('utf8'))
conn.sendall(data)
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
talk_client.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author: smoke
# file: talk_client
# time: 2021/06/17
import time
import socket
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect(('127.0.0.1', 8800))
while True:
inp=input('>>>')
sk.sendall(bytes(inp,"utf8"))
data=sk.recv(1024)
print(data.decode('utf8'))
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py
>>>hi
hi
>>>smoke #发一次不让发送了
talk_server.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 56768)>
hi
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author: smoke
# file: talk_server
# time: 2021/06/17
import socket
import select
sk=socket.socket()
sk.bind(('127.0.0.1',8800))
sk.listen(3)
inp=[sk,]
while True:
# for i in inputs: #[conn,]
conn,addr=sk.accept()
print(conn)
data=conn.recv(1024)
print(data.decode('utf8'))
conn.sendall(data)
inputs,outputs,errors=select.select([conn,],[],[],5)
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
talk_client.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author: smoke
# file: talk_client
# time: 2021/06/17
import time
import socket
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect(('127.0.0.1', 8800))
while True:
inp=input('>>>')
sk.sendall(bytes(inp,"utf8"))
data=sk.recv(1024)
print(data.decode('utf8'))
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py
>>>hi
hi
>>>
再运行一次talk_client.py
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hello hello >>>
在第一次运行的客户端继续聊天
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hi hi >>>smoke >>>
talk_server.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 34984)>
hi
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 38080)>
hello #server端没有收到第一次运行客户的smoke信息
在第二次运行的客户端继续聊天
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hello hello >>>cherry #第二个客户端卡死
talk_server.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author: smoke
# file: talk_server
# time: 2021/06/17
import socket
import select
sk=socket.socket()
sk.bind(('127.0.0.1',8800))
sk.listen(3)
inp=[sk,]
while True:
inputs,outputs,errors=select.select(inp,[],[],)
for obj in inputs: #[conn,]
if obj==sk:
conn,addr=sk.accept()
print(conn)
inp.append(conn)
else:
data=obj.recv(1024)
print(data.decode('utf8'))
Inputs=input('>>>')
obj.sendall(Inputs.encode('utf8'))
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
talk_client.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author: smoke
# file: talk_client
# time: 2021/06/17
import time
import socket
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect(('127.0.0.1', 8800))
while True:
inp=input('>>>')
sk.sendall(bytes(inp,"utf8"))
data=sk.recv(1024)
print(data.decode('utf8'))
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py
>>>hi
talk_server.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 57526)>
hi
>>>hi
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hi hi >>>
再运行一次talk_client.py
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hello
talk_server.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 57526)>
hi
>>>hi
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 57580)>
hello
>>>hello
在第二次运行的客户端继续聊天
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hello hello >>>yes
talk_server.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 57526)>
hi
>>>hi
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 57580)>
hello
>>>hello
yes
>>>yes
在第一次运行的客户端继续聊天
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hi hi >>>o,y
talk_server.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 57526)>
hi
>>>hi
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 57580)>
hello
>>>hello
yes
>>>yes
o,y
>>>ok
在第一次运行的客户端继续聊天
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hi hi >>>o,y ok >>>aaa
在第二次运行的客户端继续聊天
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hello hello >>>yes yes >>>bbb
talk_server.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py
>>>hi
hi
>>>o,y
ok
>>>aaa
ccc
>>>
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author: smoke
# file: talk_server
# time: 2021/06/17
import socket
import select
sk=socket.socket()
sk.bind(('127.0.0.1',8800))
sk.listen(3)
inp=[sk,]
while True:
inputs,outputs,errors=select.select(inp,[],[],)
for obj in inputs: #[conn,]
if obj==sk:
conn,addr=sk.accept()
print(conn)
inp.append(conn)
else:
data=obj.recv(1024)
print(data.decode('utf8'))
Inputs = input('回答%s>>>' %inp.index(obj))
obj.sendall(Inputs.encode('utf8'))
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
运行第一个客户端
talk_client.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author: smoke
# file: talk_client
# time: 2021/06/17
import time
import socket
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect(('127.0.0.1', 8800))
while True:
inp=input('>>>')
sk.sendall(bytes(inp,"utf8"))
data=sk.recv(1024)
print(data.decode('utf8'))
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py
>>>
运行第二个客户端
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>
在第一次运行的客户端继续聊天
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hi
talk_server.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 39736)>
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 39796)>
hi
回答1>>>hi,1
在第二次运行的客户端继续聊天
talk_client.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_client.py >>>hello
talk_server.py
/home/smoke/文档/DocumentFile/PycharmProjects/选课系统Demo/Jaime/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/io_multiplexing/talk_server.py
<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 39736)>
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8800), raddr=('127.0.0.1', 39796)>
hi
回答1>>>hi,1
hello
回答2>>>hello,2
浙公网安备 33010602011771号