美文网首页
python 网络编程之UDP编程

python 网络编程之UDP编程

作者: Swift社区 | 来源:发表于2019-09-16 11:55 被阅读0次

UDP编程

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

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

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

我们来看看如何通过UDP协议传输数据。和TCP类似,使用UDP的通信双方也分为客户端和服务器。服务器首先需要绑定端口:

# FBYUDPServerTest.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定端口:
s.bind(('127.0.0.1', 9999))

创建Socket时,SOCK_DGRAM指定了这个Socket的类型是UDP。绑定端口和TCP一样,但是不需要调用listen()方法,而是直接接收来自任何客户端的数据:

print('Bind UDP on 9999...')
while True:
    # 接收数据:
    data, addr = s.recvfrom(1024)
    print('Received from %s:%s.' % addr)
    s.sendto(b'Hello, %s!' % data, addr)

recvfrom()方法返回数据和客户端的地址与端口,这样,服务器收到数据后,直接调用sendto()就可以把数据用UDP发给客户端。

注意这里省掉了多线程,因为这个例子很简单。

客户端使用UDP时,首先仍然创建基于UDP的Socket,然后,不需要调用connect(),直接通过sendto()给服务器发数据:

# FBYUDPCustomerTest.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for data in [b'Michael', b'Tracy', b'Sarah']:
    # 发送数据:
    s.sendto(data, ('127.0.0.1', 9999))
    # 接收数据:
    print(s.recv(1024).decode('utf-8'))
s.close()

从服务器接收数据仍然调用recv()方法。

仍然用两个命令行分别启动服务器和客户端测试,结果如下:

# FBYUDPServerTest.py
Bind UDP on 9999...
Received from 127.0.0.1:57091.
Received from 127.0.0.1:57091.
Received from 127.0.0.1:57091.
# FBYUDPCustomerTest.py
Hello, Michael!
Hello, Tracy!
Hello, Sarah!

Process finished with exit code 0

相关文章

  • python 网络编程之UDP编程

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

  • tcp和udp

    【Python网络编程】利用Python进行TCP、UDP套接字编程 http://www.cnblogs.com...

  • Python UDP编程

    Python网络编程之UDP 一、Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一...

  • 网络编程之UDP

    TCP(面向链接) 在正式收发数据前,必须和对方建立可靠的链接特点:安全(面向链接,保证对象一定能收到数据),传输...

  • 网络编程之UDP编程

    UDP编程     UDP:User Datagram Protocal 用户数据报协议,是 OSI/RM 模型中...

  • 网络编程三——TCP和UDP

    学习链接 这篇介绍TPC和UDP的文章,讲解得十分详细易懂:Android 网络编程之TCP、UDP详解。 我在这...

  • python网络编程之UDP面向无连接

    面向无连接UDP连接是一种比较方便的连接方式,它不需要和服务器连接,直接将地址和数据封装到一起然后发送,中间如果客...

  • python 网络编程(udp)

    什么是UDP:UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组...

  • 网络编程之UDP套接字编程

    UDP套接字服务端 创建UDP数据报套接字 绑定服务端地址(本机的IP和端口号) 消息的收发 关闭套接字 UDP套...

  • Java网络编程之UDP协议

    今天我们来聊聊 网络编程这部分的内容 网络编程 1)计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外...

网友评论

      本文标题:python 网络编程之UDP编程

      本文链接:https://www.haomeiwen.com/subject/qevqsctx.html