基于UDP协议编程
基于udp套接字
udp是无链接的,先启动哪一端都不会报错。
UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务。不会使用块的合并优化算法,, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了。 即面向消息的通信是有消息保护边界的。不会发生粘包现象。
例子 1、
服务端
from socket import * server=socket(AF_INET,SOCK_DGRAM)
server.bind(('127.0.0.1',8080)) while True:
data,client_addr=server.recvfrom(1024)
print('客户端的数据: ',data)
server.sendto(data.upper(),client_addr)
客户端
from socket import * client=socket(AF_INET,SOCK_DGRAM) while True:
msg=input('>>: ').strip() client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
data,server_addr=client.recvfrom(1024)
print(data.decode('utf-8'))
例子2、
服务端
from socket import *
sever=socket(AF_INET,SOCK_DGRAM) #创建服务器套接字
sever.bind(('127.0.0.1',8090)) #绑定服务器套接字
while True: #服务器循环
data,addr_client=sever.recvfrom(1024) #接收对话
print(data.decode('utf-8'))
msg=input('>>>').strip()
if msg=='q':break
sever.sendto(msg.encode('utf-8'),addr_client) #发送对话
sever.close() #关闭服务器套接字
客户端
from socket import *
client=socket(AF_INET,SOCK_DGRAM) #创建客户套接字
while True: #通讯循环
msg=input('>>>').strip()
if msg == 'q': break
client.sendto(msg.encode('utf-8'),('127.0.0.1',8090)) #发送消息
data,addr_sever=client.recvfrom(1024) #接收消息
print(data.decode('utf-8'))
client.close() #关闭客户套接字
例子3、qq聊天
服务端
import socket
ip_port=('127.0.0.1',8081)
sever=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sever.bind(ip_port) while True:
qq_msg,addr=sever.recvfrom(1024)
print('来自[%s:%s]的一条消息:\033[1;44m%s\033[0m' %(addr[0],addr[1],qq_msg.decode('utf-8')))
back_msg=input('回复消息: ').strip() sever.sendto(back_msg.encode('utf-8'),addr)
客户1
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) qq_name_dic={
'alex':('127.0.0.1',8081),
'瞎驴':('127.0.0.1',8081),
'黎诗':('127.0.0.1',8081),
'egon':('127.0.0.1',8081),
} while True:
qq_name=input('请选择聊天对象: ').strip()
while True:
msg=input('请输入消息,回车发送: ').strip()
if msg == 'quit':break
if not msg or not qq_name or qq_name not in qq_name_dic:continue
client.sendto(msg.encode('utf-8'),qq_name_dic[qq_name]) back_msg,addr=client.recvfrom(1024)
print('来自[%s:%s]的一条消息:\033[1;44m%s\033[0m' %(addr[0],addr[1],back_msg.decode('utf-8'))) udp_client_socket.close()
客户2
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) qq_name_dic={
'alex':('127.0.0.1',8081),
'瞎驴':('127.0.0.1',8081),
'黎诗':('127.0.0.1',8081),
'egon':('127.0.0.1',8081),
} while True:
qq_name=input('请选择聊天对象: ').strip()
while True:
msg=input('请输入消息,回车发送: ').strip()
if msg == 'quit':break
if not msg or not qq_name or qq_name not in qq_name_dic:continue
client.sendto(msg.encode('utf-8'),qq_name_dic[qq_name]) back_msg,addr=client.recvfrom(1024)
print('来自[%s:%s]的一条消息:\033[1;44m%s\033[0m' %(addr[0],addr[1],back_msg.decode('utf-8'))) udp_client_socket.close()
基于UDP协议编程的更多相关文章
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制
1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...
- 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现
一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...
- 网络编程(基于udp协议的套接字/socketserver模块/进程简介)
一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...
- 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket
目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...
- 网络编程[第二篇]基于udp协议的套接字编程
udp协议下的套接字编程 一.udp是无链接的 不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...
- 基于UDP协议的套接字编程
基于udp协议的套接字编程 UDP是无链接的,先启动那一端都不会报错 UDP协议是数据报协议,发空的时候也会自带报头,因此客户端输入空,服务端也能收到 一般不用与传输大数据 虽然没有粘包问题,但是不能 ...
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...
- 基于UDP协议的网络编程
UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象. Java使用DatagramSock ...
随机推荐
- CROS跨域 解决方案 之 tomcat 做过滤处理解决
摘自:http://www.cnblogs.com/liuwenhao-1/articles/6963540.html 1 .在项目中常常遇到本地访问服务器上的链接数据访问不到,并出现如下问题: 这是 ...
- APP测试的要点
APP测试要点 功能性 UI界面 安装与卸载 升级 登录测试 离线测试 安全性测试 兼容性(操作系统,屏幕尺寸,分辨率,厂家) 消息推送 前后台切换 网络环境(wifi/2G/3G/4G/无网) 异常 ...
- Saltstack sls文件:批量安装服务
一.使用saltstack 批量安装nginx 1.创建salt目录 mkdir /srv/{salt,pillar} 2.再/srv/salt/下创建sls文件 vim nginx_install. ...
- Xshell 或者 Xftp 突然连不上阿里云
今天突然发现使用xshell 远程连接不上阿里云,废了好大的劲,才明白的差不多.只要不出意外有以下几种情况:1.安全组中有没有你需要连接的端口,2.防火墙是否关闭,3.端口是否开放权限,4.是否安装了 ...
- 20145217《网络对抗》 Web安全基础实践
20145217<网络对抗> Web安全基础实践 一.实践任务 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 二.实验后回答问题 (1)SQL注入攻击原理,如 ...
- PM,RD,FE,UE,UI,QA,OP,DBA,BRD,MRD,PRD,FSD全称解析
PM 项目经理( Project Manager ) 从职业角度,是指企业建立以项目经理责任制为核心,对项目实行质量.安全.进度.成本管理的责任保证体系和全面提高项目管理水平设立的重要管理 ...
- Linux系统基本的内存管理知识讲解
内存是Linux内核所管理的最重要的资源之一.内存管理系统是操作系统中最为重要的部分,因为系统的物理内存总是少于系统所需要的内存数量.虚拟内存就是为了克服这个矛盾而采用的策略.系统的虚拟内存通过在各个 ...
- [Android]热修复框架AndFix测试说明
AndFix,全称是Android hot-fix.是阿里开源的一个热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug.支持Android 2.3 到 6.0,并且支持arm 与 X86系 ...
- m2eclipse插件——添加依赖不显示搜索结果
使用Eclipse,安装m2eclipse插件之后,选中Maven项目的pom文件,添加依赖,点击“Add Dependency”的时候,输入要检索的jar包名称,search result却一直为空 ...
- 初涉Rx套餐 之RxBinding(让你的事件流程更清晰)
转载请注明出处:王亟亟的大牛之路 最近下班回家都在WOW,周末就爆肝,感觉人都要GO DIE了,昨天下午看了看RxBinding相关的功能感觉还是蛮强大的,所提供的API也是相当丰富(基本Rx套餐都是 ...