UDP编程

UDP是面向无连接的,意思是不需要服务端和客户端建立可靠的连接。TCP通信需要建立可靠连接。使用UDP协议时,只需要知道对方的IP地址和端口号,然后发送数据包,而不需要知道目的端是否接收成功,即不需要接收目的端的返回值。

UDP的传输方式比TCP快的多,对于可靠性要求不那么高的情况,可以使用UDP协议。

注意:绑定端口时候,TCP、UDP可以绑定同一个端口,如9999端口可以同时用于TCP、UDP协议的绑定。

UDP服务端创建:

UDP服务端的创建,分为三个步骤:

1.       创建Socket,绑定指定的IP和端口

2.       直接发送数据和接收数据

3.       关闭Socket

例子:UDP服务端

import socket


s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind((
'127.0.0.1',9999))print('绑定UDP端口 9999')while True:
    data,addr = s.recvfrom((
1024))
   
print('接收信息从 %s:%s.'%addr)
   
print('data:',data)
    s.sendto(
b'serverHello,%s!'%data,addr)

 

UDP客户端创建

1.       创建socket

2.       与服务端进行数据交换

3.       关闭socket服务

例子:

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
for data in [b'clientHello',b'clientworld']:
    s.sendto(data,(
'127.0.0.1',9999))
   
print(s.recv(1024).decode('utf-8'))
s.close()

结果:服务端输出

python爬虫连载9_UDP

客户端输出

python爬虫连载9_客户端_02

例子2:服务端不改动,把客户端的recv方法改成recv_from方法:

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
for data in [b'clientHello',b'clientworld']:
    s.sendto(data,(
'127.0.0.1',9999))
   
print(s.recvfrom(1024))
s.close()

结果:

服务端

python爬虫连载9_服务端_03

客户端

python爬虫连载9_客户端_04