# 使用多进程实现socket聊天并发-server
#服务端
import socket
from multiprocessing import Process
def server(conn,addr):
while True:
try:
msg=conn.recv(1024)
conn.send(msg.upper())
except Exception as f:
print(f)
conn.close()
break
if __name__ == '__main__':
sk=socket.socket()
sk.bind(("127.0.0.1",8000))
sk.listen(5)
while True:
conn,addr=sk.accept()
p=Process(target=server,args=(conn,addr))
p.start()
# 使用多进程实现socket聊天并发-server
import socket
from threading import Thread
def server(conn,addr):
while True:
try:
msg=conn.recv(1024)
conn.send(msg.upper())
except Exception as f:
print(f)
conn.close()
break
if __name__ == '__main__':
sk=socket.socket()
sk.bind(("127.0.0.1",8000))
sk.listen(5)
while True:
conn,addr=sk.accept()
t=Thread(target=server,args=(conn,addr))
t.start()
# 使用协程实现socket聊天并发 - server
from gevent import monkey
monkey.patch_all()
import socket
import gevent
def talk(conn):
while True:
msg = conn.recv(1024).decode()
ret_msg = msg.upper().encode()
conn.send(ret_msg)
sk = socket.socket()
sk.bind(('127.0.0.1',8000))
sk.listen()
while True:
conn,_ = sk.accept()
g = gevent.spawn(talk,conn)
# 使用非阻塞IO实现socket聊天并发 - server
#服务端
from socket import *
import time
s=socket(AF_INET,SOCK_STREAM)
s.bind(('127.0.0.1',8080))
s.listen(5)
s.setblocking(False) #设置socket的接口为非阻塞
conn_l=[]
del_l=[]
while True:
try:
conn,addr=s.accept()
conn_l.append(conn)
except BlockingIOError:
print(conn_l)
for conn in conn_l:
try:
data=conn.recv(1024)
if not data:
del_l.append(conn)
continue
conn.send(data.upper())
except BlockingIOError:
pass
except ConnectionResetError:
del_l.append(conn)
for conn in del_l:
conn_l.remove(conn)
conn.close()
del_l=[]
# 使用IO多路复用实现socket聊天并发 - server
#服务端
from socket import *
import select
s=socket(AF_INET,SOCK_STREAM)
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
s.bind(('127.0.0.1',8081))
s.listen(5)
s.setblocking(False) #设置socket的接口为非阻塞
read_l=[s,]
while True:
r_l,w_l,x_l=select.select(read_l,[],[])
print(r_l)
for ready_obj in r_l:
if ready_obj == s:
conn,addr=ready_obj.accept() #此时的ready_obj等于s
read_l.append(conn)
else:
try:
data=ready_obj.recv(1024) #此时的ready_obj等于conn
if not data:
ready_obj.close()
read_l.remove(ready_obj)
continue
ready_obj.send(data.upper())
except ConnectionResetError:
ready_obj.close()
read_l.remove(ready_obj)
# 使用socketserver实现socket聊天并发 - server
import socketserver
class Myserver(socketserver.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0]))
print(self.data)
self.request.sendall(self.data.upper())
if __name__ == "__main__":
HOST, PORT = "127.0.0.1", 9999
# 设置allow_reuse_address允许服务器重用地址
socketserver.TCPServer.allow_reuse_address = True
# 创建一个server, 将服务地址绑定到127.0.0.1:9999
server = socketserver.TCPServer((HOST, PORT),Myserver)
# 让server永远运行下去,除非强制停止程序
server.serve_forever()