Python网络编程--UDP编程入门

相比于TCP协议建立连接传输安全可靠,UDP仅仅负责发送数据,不建立连接,只需要知道IP地址和端口号,以数据包的方式传输数据(具体不了解什么是数据包的传输方式)。

这里区分一下TCP协议和UDP协议里面的接收数据和发送数据的两个方法:

TCP:s.recv(buffersize)方法只负责接收数据,需要传输的参数buffersize是一次性接收的数据大小尺寸,返回的数据也只是得到的字节类型的数据。s.send()传入的只有要发送的字节型数据信息。

UDP:s.recvform(buffrsize)方法同样需要传入接收数据的尺寸,但不同的是这个方法返回两个参数,一个是接收的数据,一个是发生者的IP地址与端口号信息。s.sendto()方法发送数据也是需要传入两个参数,一个是要发送的数据,一个是元组(里面是目标的IP地址与端口号)。

0fdfc4975cf040fa934a5f7b737babef.png

 服务器端

import socket

#SOCL_DGRAM是以数据包来传输数据,不能保证数据的完整性。
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

#绑定IP地址和端口号,服务器端必须的操作
hostname = socket.gethostname()
s.bind((hostname,9999))

print("已绑定UDP在端口9999......")
#因为是UDP协议,就不需要监听listen,直接接收客户端的信息
while True:
    #套接字的这个方法recvfrom不但接收信息,还会收到客户端的IP地址和端口(在一个元组里)
    data,addr = s.recvfrom(1024)
    print(f"接收到从{addr}发来的信息{data}")
    s.sendto(b"Welcome",addr)#必须在接收到客户端信息之后,因为要获取到客户端的地址端口号信息

这里写的时候主要不要在while循环里写s.close()关闭套接字,因为这是一个循环,会一直等待客户端发送的信息,如果关闭套接字,就无法调用recvform()方法来接收数据了。

客户端

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

hostname = socket.gethostname()
s.sendto(b'Hello',(hostname,9999))
data,addr = s.recvfrom(1024)
print("从服务器获取到信息%s"%data.decode('utf-8'))

运行结果:首先启动服务器端,等待接收来自客户端的信息Hello后,服务器端就会打印出接收到的信息,然后由服务器端发送一条Welcome信息,之后客户端接收到信息Welcome。

服务器端运行截图:

49d24c49659c4db28d58c75644ba0fec.png

 客户端运行截图:

69d976add870425b88c5f30de9a3e04e.png

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值