• 一首歌可以循环一整天《我们都是好孩子》
  • 在别人眼里是逃避,其实是不想牵累任何人,做孤独的自己。
  • 也许有一天我会背着包,独自漂流。
  • 既然做了决定,就不后悔,再见昆明!
  • 愿闻世间百态。
  • 外表的一切如常,内心的混乱又有谁能了解!
  • 突然想回安徽工作了!
  • 该来的还是来了,Uzi宣布退役!
  • 国内疫情已完全控制住,但是国外疫情大爆发,现在开始限制人员入境。
  • 啊啊啊,IP被墙了,好烦!

Gevent之Socket模块

学习 愿闻世间百态 6年前 (2018-07-31 19:21:42) 3188次浏览 已收录 0个评论

学习完 python 的协程处理,开始用 gevent 模块实现 socket 的服务端与多台客户端同时通信。

#Server
import gevent,socket,sys
from gevent import socket,monkey
from gevent_socket_client import client
monkey.patch_all()

def server(host,port):
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(500)
while True:
conn,addr = s.accept()
# print(host,type(host))
name = conn.recv(1024).decode()
print('%s is connected!'%name)
conn.sendall(b'%s is connected!'%host.encode('utf-8'))
gevent.spawn(handle_request,conn,addr,name)

def handle_request(conn,addr,name):
try:
while True:
data = conn.recv(1024)
# print(addr[0],type(addr))
# msg = 'Recv from %s:'%addr[0],data.decode(encoding='utf-8')
# msg = 'Recv from %s:' %name, data.decode(encoding='utf-8')
print('Recv from %s:' %name, data.decode(encoding='utf-8'))
# print(msg)
conn.sendall(b'Done!')
if not data:
conn.shutdown(socket.SHUT_WR)
except Exception as ex:
print(ex)
finally:
conn.close()

#Client
import socket
def client(host,port,name):
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
c.connect((host,port))
c.sendall(name.encode())
data = c.recv(1024)
print(data.decode(encoding='utf-8'))
while True:
msg = bytes(input(">>:"),encoding="utf-8")
c.sendall(msg)
data = c.recv(1024)
print(data.decode('utf-8'))
c.close()
if __name__ == '__main__':
client('127.0.0.1',5580,'liu')

WECV.CN , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Gevent 之 Socket 模块
喜欢 (0)
[]
分享 (0)

您必须 登录 才能发表评论!