本文目录:

一、TCP半连接池原理

二、UDP通讯

三、UDP聊天

四、UDP聊天2

五、UDP会粘包吗

六、UDP总结

七、UDP与TCP对比

一、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会粘包吗

1.UDP 不会粘包
2.缓冲区大小要足够装数据包大小  建议不要超过512
UDP的使用场景: 视频电话 语音电话  直播
DNS  域名解析服务器

六、UDP总结

1.TCP模板代码
    半连接池的工作原理
    目前我们的程序是单线程 服务器要么处理通讯要么处理连接请求 无法同时进行
2.TCP 和 UDP 发送数据时的流程 *****
    解释 为何TCP是可靠的 是因为发送数据后必须收到确认包
3. UDP的模板代码 *****
    与TCP代码的区别
    不需要监听 不需要接收
    type参数为 SOCK_DGRAM
    UDP 可以同时处理多个客户端 是因为CPU处理速度快 给人感觉像是同时处理
 

七、UDP与TCP对比

"""
    TCP  可靠的传输
        TCP传输数据前需要三次握手建立连接
    UDP  不可靠传输
        直接发送数据包  不关心对方是否接收成功
"""

python网络编程:socket半连接池、UDP通讯模板的更多相关文章

  1. Day07 - Python 网络编程 Socket

    1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

  2. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  3. python网络编程socket编程(TCP、UDP客户端服务器)

    摘录 python核心编程 使用socket()模块函数创建套接字——通信端点 >>> from socket import * >>> tcpSock = soc ...

  4. python网络编程(Socket、TCP、UDP)

    Socket 是网络编程的一个抽象概念,通常我们用一个Socket表示 "打开了一个网络链接",而打开一个Socket 需要知道目标计算机的IP 地址和端口号,再指定协议类型即可. ...

  5. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  6. python网络编程-socket

    python提供了两个socket模块 Socket,它提供了标准的BSD Sockets API SocketServer,它提供了服务器中心类,可以简化网络服务器的开发 下面先说socket模块 ...

  7. python网络编程socket /socketserver

    提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...

  8. Day10 Python网络编程 Socket编程

    一.客户端/服务器架构 1.C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务)[QQ,SSH,MySQL,FTP] 2.C/S架构与socket的关系: 我们学习soc ...

  9. Python 网络编程——socket

    一 客户端/服务器架构 客户端(Client)服务器(Server)架构,即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 理想/目标状态—— 最常用的软件服务器是 ...

  10. Python网络编程—socket(二)

    http://www.cnblogs.com/phennry/p/5645369.html 接着上篇博客我们继续介绍socket网络编程,今天主要介绍的内容:IO多路复用.多线程.补充知识点. 一.I ...

随机推荐

  1. Laravel的Nginx重写规则--让路由支持末尾加斜线

    默认laravel路由末尾不能加/,如果加了斜线会报404 要想支持url末尾的斜线需要在public/index.php加入如下代码: $_SERVER['REQUEST_URI'] = trim( ...

  2. lumen添加中间件实现cookie自动加密解密

    在项目根路径下执行命令:安装illuminate/cookie包 1.composer require illuminate/cookie 2.找到同版本的laravel下的\vendor\larav ...

  3. kubernetes 简单 hello world nginx svc deployment

    1.nginx svc deployment [root@k8s k8s4nginx]# cat deploynginx.yaml ################################# ...

  4. TP5之事务处理

    事务: 执行完A事件然后执行B事件,AB事件都执行完才算完成.可是有时候由于某些因素,A事件执行完,还没来得及执行B事件.怎么办?就需要回到A事件执行前.这种事情多见于电商支付功能. mysql事务要 ...

  5. pycharm中文专业版安装使用

    激活码 MTW881U3Z5-eyJsaWNlbnNlSWQiOiJNVFc4ODFVM1o1IiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1lI ...

  6. poj3714 Raid(分治求平面最近点对)

    题目链接:https://vjudge.net/problem/POJ-3714 题意:给定两个点集,求最短距离. 思路:在平面最近点对基础上加了个条件,我么不访用f做标记,集合1的f为1,集合2的f ...

  7. redis 持久化之 RDB & AOF

    Redis 持久化实现方式 快照对数据某一时间点的完整备份.例如Linux 快照备份.Redis RDB.MySQL Dump. 日志将数据的所有操作都记录到日志中,需要恢复时,将日志重新执行一次.M ...

  8. 二叉树(Java实现)

    一.常见用语 1.逻辑结构:描述数据之间逻辑上的相关关系.分为线性结构(如,字符串),和非线性结构(如,树,图). 2.物理结构:描述数据的存储结构,分为顺序结构(如,数组)和链式结构. 3.结点的度 ...

  9. C#与C++的区别

    C# 参考链接:https://www.runoob.com/csharp/csharp-tutorial.html ------------------C#数据类型----------------- ...

  10. phpstudy 最新版linux 面板 web防火墙后门防护功能教程

    phpstudy linux 面板针对服务器和网站做了全面的安全防护措施,尽可能的防范网站被入侵,留置后门风险,本篇文章着重介绍phpstudy linux 面板其中的一项安全功能 [网站防火墙]之[ ...