python网络编程:socket半连接池、UDP通讯模板
本文目录:
一、TCP半连接池原理
客户端
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",9999))
while True:
data = input(">>>:")
if not data:continue
client.send(data.encode("utf-8"))
msg = client.recv(1024).decode("utf-8")
print(msg)
client.close()
服务器
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("127.0.0.1",9999))
# 不是最大连接数 !!
server.listen(5)
while True:
c,addr = server.accept()
while True:
try:
msg = c.recv(1024).decode("utf-8")
if not msg:
c.close()
break
c.send(msg.upper().encode("utf-8"))
except BaseException:
print("客户端异常断开")
c.close()
break
server.close()
二、UDP通讯
服务器
import socket # 创建socket对象 指定type参数为socket.SOCK_DGRAM 表示使用UDP协议
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # datagram数据报的意思
# 绑定ip和端口
server.bind(("127.0.0.1",8888)) while True:
# 接收数据 返回一个元祖 数据和 发送方的地址
msg,c_addr = server.recvfrom(1024)
print("收到来自%s: 说:%s" % (c_addr[0] ,msg.decode("utf-8")))
# 发送数据到指定ip和端口
server.sendto(msg.upper(),c_addr)
客户端
import socket # 创建socket对象 指定type参数为socket.SOCK_DGRAM 表示使用UDP协议
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # datagram数据报的意思
# 绑定ip和端口
server.bind(("127.0.0.1",8888)) while True:
# 接收数据 返回一个元祖 数据和 发送方的地址
msg,c_addr = server.recvfrom(1024)
print("收到来自%s: 说:%s" % (c_addr[0] ,msg.decode("utf-8")))
# 发送数据到指定ip和端口
server.sendto(msg.upper(),c_addr)
三、UDP聊天
客户端1
import socket c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True:
msg = input(">>>:")
c.sendto(msg.encode("utf-8"),("127.0.0.1",8848))
msg, addr = c.recvfrom(1024)
print(msg.decode("utf-8"))
客户端2
import socket c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True:
msg = input(">>>:")
c.sendto(msg.encode("utf-8"),("127.0.0.1",8848))
msg, addr = c.recvfrom(1024)
print(msg.decode("utf-8"))
服务器
"""
群聊思路
1.客户端先把数据交给服务器
2.服务器先存储对方的地址
3.把收到的数据给所有人都发一遍 """ import socket server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind(("127.0.0.1",8848)) # 如果客户端与服务器在同一台计算机 并且有多个客户端 这些客户端ip都是相同的127.0.01 clients = {}#定义个群聊客户字典 while True:
msg,addr = server.recvfrom(1024) # 存储对方的地址:
clients[addr[1]] = addr print(msg.decode("utf-8"))
# 循环发给所有人
for c in clients:
# 这个消息不用给发送方发回去
# if c == addr[1]:
# continue
server.sendto(msg,clients[c])
四、UDP聊天2
发送机
import socket c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True:
msg = input(">>>:")
c.sendto(msg.encode("utf-8"),("127.0.0.1",8848))
服务器
"""
群聊思路
1.客户端先把数据交给服务器
2.服务器先存储对方的地址
3.把收到的数据给所有人都发一遍 """ import socket server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind(("127.0.0.1",8848)) # 如果客户端与服务器在同一台计算机 并且有多个客户端 这些客户端ip都是相同的127.0.01 clients = {} while True:
msg,addr = server.recvfrom(1024) # 存储对方的地址:
clients[addr[1]] = addr print(msg.decode("utf-8"))
# 循环发给所有人
for c in clients:
# 这个消息不用给发送方发回去
# if c == addr[1]:
# continue
server.sendto(msg,clients[c])
接收机
import socket c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 先随便发一条消息给服务器 让服务知道自己的地址
c.sendto("register".encode("utf-8"),("127.0.0.1",8848)) while True:
msg, addr = c.recvfrom(1024)
print(msg.decode("utf-8"))
五、UDP会粘包吗
2.缓冲区大小要足够装数据包大小 建议不要超过512
六、UDP总结
半连接池的工作原理
目前我们的程序是单线程 服务器要么处理通讯要么处理连接请求 无法同时进行
解释 为何TCP是可靠的 是因为发送数据后必须收到确认包
与TCP代码的区别
不需要监听 不需要接收
type参数为 SOCK_DGRAM
UDP 可以同时处理多个客户端 是因为CPU处理速度快 给人感觉像是同时处理
七、UDP与TCP对比
TCP 可靠的传输
TCP传输数据前需要三次握手建立连接
直接发送数据包 不关心对方是否接收成功
python网络编程:socket半连接池、UDP通讯模板的更多相关文章
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- python网络编程socket编程(TCP、UDP客户端服务器)
摘录 python核心编程 使用socket()模块函数创建套接字——通信端点 >>> from socket import * >>> tcpSock = soc ...
- python网络编程(Socket、TCP、UDP)
Socket 是网络编程的一个抽象概念,通常我们用一个Socket表示 "打开了一个网络链接",而打开一个Socket 需要知道目标计算机的IP 地址和端口号,再指定协议类型即可. ...
- python网络编程-socket编程
一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...
- python网络编程-socket
python提供了两个socket模块 Socket,它提供了标准的BSD Sockets API SocketServer,它提供了服务器中心类,可以简化网络服务器的开发 下面先说socket模块 ...
- python网络编程socket /socketserver
提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...
- Day10 Python网络编程 Socket编程
一.客户端/服务器架构 1.C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务)[QQ,SSH,MySQL,FTP] 2.C/S架构与socket的关系: 我们学习soc ...
- Python 网络编程——socket
一 客户端/服务器架构 客户端(Client)服务器(Server)架构,即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 理想/目标状态—— 最常用的软件服务器是 ...
- Python网络编程—socket(二)
http://www.cnblogs.com/phennry/p/5645369.html 接着上篇博客我们继续介绍socket网络编程,今天主要介绍的内容:IO多路复用.多线程.补充知识点. 一.I ...
随机推荐
- Android studio无法发现nexus 5x解决方法
原因: 没有安装adb interface驱动. 解决方法: 1. 使用Android device manager下载google usb driver. 2. 打开设备管理器,右键带黄色感叹号 ...
- HADOOP依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- pandas中截取一列字符串中每行字符串的一部分
import pandas as pd df = pd.DataFrame([[',1], [',2], [',3], [',4], [',5], [',6]],columns=['str','num ...
- kubeadm安装集群系列-4.证书更新
证书更新 默认证书一年有效期 一旦证书过期,使用kubectl时会出现如下提示:`Unable to connect to the server: x509: certificate has expi ...
- LCA -cogs2098 [SYOI 2015] Asm.Def的病毒
题目链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=vQXmxVaPU [题目描述] “这就是我们最新研制的,世界上第一种可持久化动态计算机病 ...
- 使用国内镜像给ROS安装提速
大半年没写博客了.最近有幸参与机器人导航研究,在学习ROS相关知识.在安装ROS时使用国外的官方源安装非常慢.这里把使用国内镜像的安装方式做一个记录. 笔者用的是Kinetic版本,操作系统是Ubun ...
- 【OpenCV】轮廓的特征矩Moment
opencv中的矩主要包括以下几种:空间矩,中心矩和中心归一化矩. class Moments { public: ...... // 空间矩 double m00, m10, m01, m20, m ...
- c++ static_cast和dynamic_cast详解
注:从图中可以看出,派生类不仅有自己的方法和属性,同时它还包括从父类继承来的方法和属性.当我们从派生类向基类转换时,不管用传统的c语言还是c++转换方式都可以百分百转换成功.但是可怕是向下转换类型,也 ...
- day35 守护进程、互斥锁、IPC
day35 守护进程.互斥锁.IPC 1.守护进程 # 守护进程:当父进程执行完毕后,设置的守护进程也会跟着结束# 当一个进程被设置为守护进程后,其不能再产生子进程 from multiproces ...
- VUE 1.0
现代开发模式:vue/react. 20%的时间花在了表现层 传统开发模式:jquery. 80%的时间花在了表现层 MVC——数据.表现.行为分离 视图层(表现层)<----->数据层 ...