网络编程[第二篇]基于udp协议的套接字编程
udp协议下的套接字编程
一.udp是无链接的 不可靠的
而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否
基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息,只需自己发送了即可
二.客户端
import socket #买手机 -- 套接字家族 | 端口协议
phone = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#服务端地址
ip_port = ('127.0.0.1',8001)
#实现多次发送信息
while True:
#自定义一条信息
msg = input('输入一条信息:')
#若信息为空,会导致程序卡死,用if判断跳过此情况
if not msg:
continue
# 接通电话后发信息 指定数据 和 服务端地址
phone.sendto(msg.encode('utf-8'),ip_port)
print('向服务端发送信息:',msg)
#接收反馈信息 指定一次接收的量
data,addr = phone.recvfrom(10)
print('成功接收到服务端反馈信息 ')
#关机
phone.close()
三.服务端
import socket #买手机 -- 套接字家族 | 端口协议
phone = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #买电话卡 -- 监听一个地址- ip | 端口号
phone.bind(('127.0.0.1',8001)) #多次接发信息
while True:
#电话接通后接收信息 指定一次接收信息的数量
#返回数据 和 客户端地址
data,addr = phone.recvfrom(10)
print('接受到客户端信息为: ',data)
#接收到信息后,反馈给client端一个信息,以告诉他已成功接收
phone.sendto(data,addr)
print('成功向客户端发送一个反馈信息') #完成一切操作后关掉link,再关机
link.close()
phone.close()
四.总结——简化
客户端:
cs = socket() # 创建客户套接字
comm_loop: # 通讯循环
cs.sendto()/cs.recvfrom() # 对话(发送/接收)
cs.close() # 关闭客户套接字
服务端:
1 ss = socket() #创建一个服务器的套接字
2 ss.bind() #绑定服务器套接字
3 inf_loop: #服务器无限循环
4 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)
5 ss.close() # 关闭服务器套接字
五.tcp-udp
1.基于udp协议的套接字编程: 由于udp无连接,所以可以同时多个客户端去跟服务端通信
基于tcp协议的套接字编程也可以实现,但更为复杂
2.revc 和 revcfrom 的异同
均是从内核态内存中接收数据,revc不能接收空数据;而revcfrom可以接收空数据
revc/revcfrom接收信息的原理:

网络编程[第二篇]基于udp协议的套接字编程的更多相关文章
- 网络编程[第一篇]基于tcp协议的套接字编程
将服务端-客户端的连接比作双方打电话的过程 2019-07-24 一.客户端 主动的一方: 客户端实例化一个socket对象--> 主动像服务端发送连接请求--> (服务端接受请求后即可进 ...
- 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket
目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...
- 基于UDP协议的套接字编程
基于udp协议的套接字编程 UDP是无链接的,先启动那一端都不会报错 UDP协议是数据报协议,发空的时候也会自带报头,因此客户端输入空,服务端也能收到 一般不用与传输大数据 虽然没有粘包问题,但是不能 ...
- 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现
一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...
- 网络编程(基于udp协议的套接字/socketserver模块/进程简介)
一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...
- 网络编程基础:粘包现象、基于UDP协议的套接字
粘包现象: 如上篇博客中最后的示例,客户端有个 phone.recv(2014) , 当服务端发送给客户端的数据大于1024个字节时, 多于1024的数据就会残留在管道中,下次客户端再给服务端发命令时 ...
- 网络编程(四)--基于udp协议的套接字、socketserver模块
一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头 ...
- python 之 网络编程(基于UDP协议的套接字通信)
8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...
- 网络编程(四)——基于udp协议的套接字socket、socketserver模块的使用
基于udp协议的套接字.socketserver模块 一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. ...
随机推荐
- CRT小键盘输入乱码
Options --> Session Options --> Terminal --> Emulation --> Modes 去选中 Enable keypad mode ...
- PHP 之验证码类封装
一.效果图 二.类代码 <?php /** * Created by PhpStorm. * User: Yang * Date: 2019/8/13 * Time: 10:51 */ clas ...
- arcpy 获得是否为布局mxd.activeView
arcpy 获得是否为布局mxd.activeView print mxd.activeView PAGE_LAYOUT mxd.pageSizePageSize(width=21.590043180 ...
- 2.4 Go语言基础之切片
本文主要介绍Go语言中切片(slice)及它的基本使用. 一.引子 因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性. 例如: func arraySum(x [3]int) ...
- android在点击EditText的时候始终不弹出软件键盘
场景描述:正常情况下,当点击EditText时,软键盘会弹出来.现在的要求是当点击EditText时,弹日期选择对话框,选择的结果显示在EditText上.若不处理,当点击EditText时,软键盘和 ...
- <iframe>和<frame>标签属性详解
iframe>元素会创建包含另外一个文档的内联框架(即行内框架): 一.align 属性(不赞成) align属性规定iframe相对于周围元素的水平和垂直对齐方式,因为iframe元素是行内元 ...
- 依靠MySQL(frm、MYD、MYI)数据文件恢复
该方法并不是适用于所有MySQL数据库 此次恢复是朋友那边的数据查不了了,请求我支援,出于各种心理原因,我答应试试,于是就有了这篇文章和这次经历,废话不多说.... 物理条件:宿机是Ubuntu16. ...
- iOS自适应行高方法及问题
最近一周被项目的动态高度虐的很惨,感觉浪费了很多时间,但是值得高兴的是对动态高度的使用掌握了好多方法,并且知道了方法之间的区别和优缺点. 1.最常用的: UITableView+FDTemplateL ...
- C#的String.Format举例
1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...
- Python使用hashlib模块做字符串加密
#-*- encoding:gb2312 -*- import hashlib a = "a test string" print 'md5 = %s' % (hashlib.md ...