TCP服务端实现并发
socket 在 tcp 协议下通信
客户端
import socket
# 创建客户端TCP协议通信
c = socket.socket()
# 与指定服务端握手
c.connect(('127.0.0.1', 8080))
# 通信循环
while True:
# 向服务端发送信息
msg = input('>>>')
if len(msg) == 0:continue
c.send(msg.encode('utf-8'))
# 接受服务端信息
data = c.recv(1024)
print(data.decode('utf-8'))
普通服务端
import socket
# 创建服务端TCP通信
s = socket.socket()
# 绑定ip+port
s.bind(('127.0.0.1', 8080))
s.listen(5)
# 连接循环
while True:
# 接收用户端管道和地址
conn, addr = s.accept()
print(addr)
# 通信循环
while True:
# 客户端若异常退出会报错,try一下
try:
# 接收客户端发送的信息
data = conn.recv(1024)
if len(data) == 0:break
# 在服务端打印出来
print(data.decode('utf-8'))
# 转大写发给服务端
conn.send(data.upper())
except ConnectionResetError:
break
# 客户端退出 服务端则关闭连接通道
conn.close()
此时服务端每次只能服务一个用户,因为建立连接与接受信息是同一个人在干活,要想建立另外一个连接需要先断开正在连接的这个用户
所以实现socket并发的思路是: 让建立连接与接受信息分开干活
并发服务端(线程下的实现方法)
import socket
from threading import Thread
# 创建TCP协议socket通信对象
s = socket.socket()
s.bind(('127.0.0.1', 8080))
s.listen(5)
# 创建循环通信的子线程
def communication(conn, addr):
while True:
try:
data = conn.recv(1024)
print(data.decode('utf-8'))
msg = input('>>>:')
if len(msg) == 0:continue
conn.send(msg.encode('utf-8'))
except ConnectionResetError as e:
print(e,addr)
break
conn.close()
# 创建连接循环
while True:
conn, addr = s.accept()
# print(conn)
print(addr)
# 创建子线程,
t = Thread(target=communication, args=(conn,addr))
t.start()
TCP服务端实现并发的更多相关文章
- 子进程回收资源两种方式,僵尸进程与孤儿进程,守护进程,进程间数据隔离,进程互斥锁,队列,IPC机制,线程,守护线程,线程池,回调函数add_done_callback,TCP服务端实现并发
子进程回收资源两种方式 - 1) join让主进程等待子进程结束,并回收子进程资源,主进程再结束并回收资源. - 2) 主进程 “正常结束” ,子进程与主进程一并被回收资源. from multipr ...
- GIL全局解释锁,死锁,信号量,event事件,线程queue,TCP服务端实现并发
一.GIL全局解释锁 在Cpython解释器才有GIL的概念,不是python的特点 在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势. 1.GIL介绍 ...
- 8.14 day32 TCP服务端并发 GIL解释器锁 python多线程是否有用 死锁与递归锁 信号量event事件线程q
TCP服务端支持并发 解决方式:开多线程 服务端 基础版 import socket """ 服务端 1.要有固定的IP和PORT 2.24小时不间断提供服务 3.能够支 ...
- 进程池与线程池、协程、协程实现TCP服务端并发、IO模型
进程池与线程池.协程.协程实现TCP服务端并发.IO模型 一.进程池与线程池 1.线程池 ''' 开进程开线程都需要消耗资源,只不过两者比较的情况下线程消耗的资源比较少 在计算机能够承受范围内最大限度 ...
- python GIL全局解释器锁,多线程多进程效率比较,进程池,协程,TCP服务端实现协程
GIL全局解释器锁 ''' python解释器: - Cpython C语言 - Jpython java ... 1.GIL: 全局解释器锁 - 翻译: 在同一个进程下开启的多线程,同一时刻只能有一 ...
- 基于Select模型的Windows TCP服务端和客户端程序示例
最近跟着刘远东老师的<C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台)>,Bilibili视频地址为C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台),重新复习下 ...
- 利用select实现IO多路复用TCP服务端
一.相关函数 1. int select(int maxfdp, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeva ...
- TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...
- Java网络编程(TCP服务端)
/* * TCP服务端: * 1.创建服务端socket服务,并监听一个端口 * 2.服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象 * 3.可以通过获 ...
随机推荐
- Java的设计模式(7)— 生产者-消费者模式
生产者-消费者模式是一个经典的多线程设计模式,它为多线程间的协作提供了良好的解决方案.这个模式中,通常有两类线程,即若干个生产者线程和若干个消费者线程.生产者线程负责提交用户请求,消费者线程则负责具体 ...
- JDK1.8 的 HashMap 源码之文件注释
文章目录 null 插入,key的位置变化 迭代操作时间 性能因素 负载因子 Comparable 加锁 迭代器修改 null 插入,key的位置变化,迭代操作时间,性能因素,负载因子,Compara ...
- Python-08-内置函数
详情 https://docs.python.org/3/library/functions.html?highlight=built#ascii 1. abs() 取绝对值 2. all() 如果可 ...
- python学习-57 logging模块
logging 1.basicConfig方式 import logging # 以下是日志的级别 logging.debug('debug message') logging.info('info ...
- 爬虫探索Chromedriver+Selenium初试
今天分享Python使用Chromedriver+Selenium爬虫的的方法,Chromedriver是一个有意思的爬虫插件,这个插件的爬虫方式主要是完全模拟浏览器点击页面,一步一步去找你要的东西, ...
- T-SQL学习笔记
学习T-SQL时记录的笔记,记得并不全也不详细 if和while语句 declare @age int select @age = DATEDIFF(year,stuAge,getdate()) fr ...
- ubuntu配置fastdfs+Nginx
全程参考主线来自:https://blog.csdn.net/xiaoxie762457/article/details/80690841(文中图片失效不造成影响) Nginx安装主要参考:https ...
- jquery.marquee
http://aamirafridi.com/jquery/jquery-marquee-plugin#examples <script src="/plugins/marquee/j ...
- C#-Json-抽象类的反序列化
引用: using System; using System.Collections.Generic; using Newtonsoft.Json; using Newtonsoft.Json.Lin ...
- 微信小程序通讯录字母排序
微信小程序通讯录 字母排序效果: demo地址:https://github.com/PeachCoder/wechat-contacts