Python 3 udp套接字

TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议

使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达并不清楚。

虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议

基于UDP的套接字 udp是无链接的,先启动哪一端都不会报错

udp服务端

ss = socket()   #创建一个服务器的套接字

ss.bind()       #绑定服务器套接字

inf_loop:       #服务器无限循环

     cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)

ss.close()                          # 关闭服务器套接字

udp客户端

cs = socket()   # 创建客户套接字

comm_loop:      # 通讯循环

    cs.sendto()/cs.recvfrom()   # 对话(发送/接收)

cs.close()                      # 关闭客户套接字

udp套接字简单示例

from socket import *

udp_server=socket(AF_INET,SOCK_DGRAM)

udp_server.bind(('127.0.0.1',8080))

while True:

    data,client_addr=udp_server.recvfrom(1024)

    print(data,client_addr)

    udp_server.sendto(data.upper(),client_addr)

服务端

from socket import *

udp_client=socket(AF_INET,SOCK_DGRAM)

while True:

    msg=input('>>: ').strip()

    udp_client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))

    data,server_addr=udp_client.recvfrom(1024)

print(data.decode('utf-8'))

客户端

基于udp套接字不会粘包

from socket import *

udp_server=socket(AF_INET,SOCK_DGRAM)

udp_server.bind(('127.0.0.1',8080))

data1,client_addr=udp_server.recvfrom(1)  # windows 系统会报异常 linux 系统不会报异常

print('data1',data1)

data2,client_addr=udp_server.recvfrom(1024)

print('data2',data2)

服务端

from socket import *

udp_client=socket(AF_INET,SOCK_DGRAM)

udp_client.sendto('hello'.encode('utf-8'),('127.0.0.1',8080))

udp_client.sendto('world'.encode('utf-8'),('127.0.0.1',8080))

客户端

udp套接字的并发

import socketserver

class MyUDPhandler(socketserver.BaseRequestHandler):

    def handle(self):

        print(self.request)

        self.request[1].sendto(self.request[0].upper(),self.client_address)

if __name__ == '__main__':

    s=socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyUDPhandler)

    s.serve_forever()

服务端

from socket import *

udp_client=socket(AF_INET,SOCK_DGRAM)

while True:

    msg=input('>>: ').strip()

    udp_client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))

    data,server_addr=udp_client.recvfrom(1024)

    print(data.decode('utf-8'))

客户端

Python 3 udp 套接字的更多相关文章

  1. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

  2. Python之路(第三十二篇) 网络编程:udp套接字、简单文件传输

    一.UDP套接字 服务端 # udp是无链接的,先启动哪一端都不会报错 # udp没有链接,与tcp相比没有链接循环,只有通讯循环 server = socket.socket(socket.AF_I ...

  3. python UDP套接字通信

    UDPserver.py import socket #导入套接字模块 s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # - socket.A ...

  4. python开发socket套接字:粘包问题&udp套接字&socketserver

    一,发生粘包 服务器端 from socket import * phone=socket(AF_INET,SOCK_STREAM) #套接字 phone.setsockopt(SOL_SOCKET, ...

  5. 4月23日 python学习总结 套接字UDP和 操作系统理论,多道理论

    一.套接字UDP udp是无链接的,先启动哪一端都不会报错 UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务.不会使用块的合并优化算法,, ...

  6. 探索UDP套接字编程

    UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...

  7. 【转】 探索UDP套接字编程

    UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...

  8. 【nodejs】创建udp套接字的类型参数的含义

    nodejs在创建udp套接字的时候,需要传入一个类型参数.有两种类型参数可供选择:udp4和udp6.udp4对应的就是ipv4,udp6对应的是ipv6.

  9. JavaTCP和UDP套接字编程

    在我们刚开始入门Java后端的时候可能你会觉得有点复杂,包含了很多杂七杂八的知识,例如文件上传下载,监听器,JDBC,请求重定向,请求转发等等(当然也没有很多),但是我们自己真正的去开发一个小型网站( ...

随机推荐

  1. smali文件内容具体介绍

    大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR打开鳄鱼小顽皮APK能看到的是(Google Play下载的完整版版 ...

  2. 【CODEFORCES】 A. Initial Bet

    A. Initial Bet time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  3. Maven的pom文件内容详细理解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  4. baksmali反编译出现:UNEXPECTED TOP-LEVEL ERROR:....Too many open files

    解包大型apk文件,可能会出现例如以下错误, UNEXPECTED TOP-LEVEL ERROR: java.util.concurrent.ExecutionException: java.io. ...

  5. secureCrt 开启Linux上的oracle服务

    IP   :  192.168.0.21 user:  root pwd:     123456 --------------------------------------------------- ...

  6. iOS左滑手势失效

    iOS7之后,苹果优化了一个小功能,就是对于UINavagationController堆栈里的UIViewController,只要轻轻在视图控制器的左边缘右滑一下,该视图控制器就会pop出栈(前提 ...

  7. ipmi 最新和MegaCli 监控磁盘和raid信息

    集群监控之 —— ipmi操作指南 原创 2010年03月23日 16:45:00 标签: 集群 / 服务器 / command / callback / user / interface 12224 ...

  8. Exception in thread "main" java.util.ConcurrentModificationException

    package test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public c ...

  9. CSS3 - 鼠标移入移出时改变样式

    1,使用伪类实现样式切换伪类是CSS2.1时出现的新特性,让许多原本需要JavaScript才能做出来的效果使用CSS就能实现.比如实现下面的鼠标悬停效果,只要为:hover伪类应用一组新样式即可.当 ...

  10. 验证-- email类型输入框(电子邮件地址)--multiple

    如果需要一个用来填写电子邮件地址的输入框,可以使用email类型.这样浏览器可以帮我们验证格式是否正确,而不需要自己写验证规则.原文:HTML5新控件 - email类型输入框(电子邮件地址) 1,只 ...