一、python单线程下实现多个socket并发

1.1 服务端

import sys
# import socket
import time
import gevent
from gevent import socket
from gevent import monkey monkey.patch_all() # 类似于python中的黑魔法,把很多模块的阻塞的变成非阻塞的,比如socket中的rece和send都变
# 为不阻塞了 def server(port):
s = socket.socket()
s.bind(("127.0.0.1", port))
s.listen(2000)
while True:
cli, add = s.accept()
gevent.spawn(handle_request, cli)
# 通过gevent的启动一个协程,把客户端的socket对象传进去 def handle_request(s):
try:
while True:
data = s.recv(1024)
print("收到的信息:", str(data, encoding="utf-8"))
s.send(data)
if not data:
s.shutdown(socket.SHUT_WR)
# 把和客户端这个链接销毁
except Exception as ex:
print(ex)
finally:
s.close() if __name__ == '__main__':
server(8000)

1.2 客户端

import socket
import gevent
import threading
import multiprocessing
'''
ip_bind = ("127.0.0.1",8000)
c = socket.socket()
c.connect(ip_bind)
while True:
data = input("客户端:")
c.send(bytes(data,encoding="utf-8"))
data = c.recv(1024)
print("服务端:",str(data,encoding="utf-8")) c.close()
'''
import socket
import gevent
ip_bind = ("127.0.0.1",8000)
c = socket.socket()
c.connect(ip_bind)
def f(n):
while True:
# c.send(bytes(n,encoding="utf-8"))
data = str(n)
c.send(bytes(data,encoding="utf-8"))
data = c.recv(1024)
print("server:",str(data,encoding="utf-8"))
c.close()
x = []
if __name__ == '__main__':
l = []
"""
多线程实现并发客户端
for i in range(500):
t = threading.Thread(target=f,args=[str(i),])
t.start()
l.append(t)
for t in l:
t.join() """
# 多进程实现并发客户端
for i in range(100):
p = multiprocessing.Process(target=f,args=[i,])
p.start()
l.append(p)
for p in l:
p.join()

最新文章

  1. CSS行高——line-height
  2. Android学习随笔--ListView的分页功能
  3. Java_log4j
  4. TCP/IP小纪
  5. 在hibernate中使用SQL语句
  6. php判断是移动端还是pc
  7. PHP实现队列(Queue)数据结构
  8. 【转】Spring Bean单例与线程安全
  9. MySql插入点数据
  10. Burp Scanner Report
  11. Idea问题:“marketplace plugins are not loaded”解决方案
  12. [MACHINE LEARNING] Can we predict voting outcomes?
  13. 将本地光盘做成yum源
  14. vue全家桶+Koa2开发笔记(4)--redis
  15. css text-align文字两端对齐
  16. Android4.4r1(KitKat)源码下载地址
  17. RequestDispatcher 的 forward和include
  18. Oracle性能诊断艺术-相关脚本说明
  19. mongodb基础学习5-索引
  20. C# WebBrowser设置代理

热门文章

  1. Oracle 常用函数积累
  2. iOS开发中全量日志的获取
  3. centos7.6 安装Tomcat-8.5.39
  4. 【转载】Vue.js 安装及其环境搭建
  5. Linux系统学习 十七、VSFTP服务—本地用户访问—用户访问控制
  6. 关于Mysql修改帐号密码的多种方法
  7. 剑指Offer-44.翻转单词顺序列(C++/Java)
  8. 【xAsset框架】HFS 轻量级HTTP Server快速入门指南
  9. Linux 解压xz格式文件及安装xz
  10. MarkDown富文本编辑器怎么加载模板文件