Python UDP编程

转载 2015年07月06日 16:59:13

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

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

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

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

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('Hello, %s!' % data, addr)

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

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

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

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

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

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

client-server

小结

UDP的使用与TCP类似,但是不需要建立连接。此外,服务器绑定UDP端口和TCP端口互不冲突,也就是说,UDP的9999端口与TCP的9999端口可以各自绑定。

源码参考:https://github.com/michaelliao/learn-python/tree/master/socket


python实现socket通讯(UDP)

Server:      1 import socket      2       3 address = ('127.0.0.1', 31500)      4 s = socket.socket(...
  • sunboy_2050
  • sunboy_2050
  • 2010年10月27日 15:38
  • 43217

python 网络编程 udp示例

由于UDP是无连接的,与TCP的区别在服务器端表现为,无需监听函数listen()对客户端的连接进行监听; 在客户端的表现为客户端的socket无需与服务器建立连接就能够进行数据的发送与接收,即无需c...
  • kirrin
  • kirrin
  • 2014年03月25日 22:12
  • 11696

python实现UDP通信

UDP,用户数据报传输协议,它位于TCP/IP协议的传输层,是一种无连接的协议,它发送的报文不能确定是否完整地到达了另外一端。UDP广泛应用于需要相互传输数据的网络应用中,如QQ使用的就是UDP协议。...
  • u011608357
  • u011608357
  • 2014年02月23日 23:25
  • 5047

Python网络编程UDP服务器与客服端简单例子(调试通过)

UDP服务器代码: #!/usr/bin/env python # -*- coding:UTF-8 -*- from socket import * from time import cti...
  • hu330459076
  • hu330459076
  • 2012年08月15日 10:32
  • 19576

python3实现UDP协议的简单服务器和客户端

利用python中的socket模块中的来实现UDP协议,这里写一个简单的服务器和客户端。为了说明网络编程中UDP的应用,这里就不写图形化了,在两台电脑上分别打开UDP的客户端和服务端就可以了。 ...
  • e62ces0iem
  • e62ces0iem
  • 2017年06月13日 21:15
  • 1471

python udp 广播

最近有需求写了个udp 广播的工具,百度了半天,发现满地坑,wireshark 抓了半天包,发现都是只能localhost收发。这里就记录一下吧 listener.py #!/usr/bin/en...
  • godvmxi
  • godvmxi
  • 2015年08月07日 16:07
  • 35911

python udp简单示例

#udpClient.py #!/usr/bin/env python from socket import * ADDR = ('127.0.0.1', 3000) udpCliSock = so...
  • caobin0825
  • caobin0825
  • 2016年05月03日 12:01
  • 149

python udp网络

网络初学,人生苦短 用python udp client from socket import * HOST = '192.168.0.130' //目标网络ip 应该要在同一局域网下 PORT = ...
  • qq_31764341
  • qq_31764341
  • 2017年12月07日 20:52
  • 16

python学习——UDP编程

TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是...
  • youzhouliu
  • youzhouliu
  • 2016年07月18日 08:52
  • 820

【安全牛学习笔记】UDP端口扫描

ICMP port-unreachable python脚本:  #! /usr/bin/python import logging logging.getLogger("sc...
  • edu_aqniu
  • edu_aqniu
  • 2017年10月29日 23:37
  • 146
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python UDP编程
举报原因:
原因补充:

(最多只允许输入30个字)