python使用udp协议要通过socket技术:
1.引包
2.创建流对象(ipv4, udp)
3.发送(二进制字符串, 元组ip和端口)
4.关闭流对象
socket:
译为:套接字/流对象
网络上各种各样的服务大多都是基于 Socket 来完成通信的例如我们每天浏览网页、QQ 聊天、收发 email 等等
Python中:UDP-socke通讯:
创建一个基于udp的网络程序流程很简单,具体步骤如下:
1、创建客户端套接字
2、发送/接收数据
3、关闭套接字
例子:
server端:001_udp_server.py
import socket
# socket.AF_INET:表示IVP4;socket.SOCK_DGRAM:表示UDP协议
udp_server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udp_server.bind(('127.0.0.1',8849))# 绑定端口,接受这个端口的消息
while True:
data,addr = udp_server.recvfrom(1024)
print('来自',addr,"的消息",data)
client端:001_udp_client.py
import socket
# 创建对象
udp_client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 循环接受客户端的键盘输入
while True:
data = input("请输入要发送的数据:")
# 发数据
udp_client.sendto(data.encode('utf-8'),('127.0.0.1',8849))
# 收消息
# print(udp_client.recv(1024).decode('utf-8'))
# udp_client.close()
以上代码可以实现UDP通讯,客户端发送数据,服务端反馈,运行如下:
客户端:
服务端:
Python中:TCP-socke通讯:
Tcp通讯与udp通讯略有不同,原因是由于udp和tcp底层通讯的原理不同;
Udp就好比发短信,客户端发送数据后,我不需要知道服务端是否接收成功;
Tcp就好比打电话,客户端发送数据后,要等待服务端的反馈,反馈成功连接后方可通讯;
代码如下:
server端:001_tcp_server.py
import socket
"""
作为服务端:
1/绑定端口供客户端连接
2/因为是TCP需要用listen()方法,限定连接客户端的数量
3/调用accpt()方法,分配新的socket给客户端1进行通讯
socket1,addr = tcp_server.accept() # 返回一个连接(会话),和一个地址(IP,PORT)
4/循环接收数据
5/输出,并调用send方法对客户端进行反馈
"""
# socket.AF_INET:表示IPV4;socket.SOCK_STREAM:表示TCP
tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定端口,供客户端连接
tcp_server.bind(('127.0.0.1',8848))
# 设置可连接客户端上限
tcp_server.listen(3)
# 接收客户端访问,分配会话
socket1,addr = tcp_server.accept()
while True:
# 调用recv()方法接收数据1024为缓存,这个值可自由写
data = socket1.recv(1024)
# 打印客户端发来的信息
print("收到",addr,"的信息",data.decode('utf-8'))
# 给客户端发送反馈数据
send_data = (data.decode('utf-8')).encode('utf-8')
socket1.send(send_data)
Client端:001_tcp_client.py
import socket
"""
作为客户端进行发送数据
1/因为是TCP需要在创建对象之后调用connet(IP,PORT)方法进行与服务端的通讯
2/循环提示输入的数据信息
3/调用send()方法进行数据发送
4/调用rcve()方法进行数据的接受
5/输出
"""
tcp_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 调用connect()方法进行与服务端的连接
tcp_client.connect(('127.0.0.1',8848))
print("连接成功")
while True:
# 发送反馈的信息
date = input("输入要发送的数据:")
tcp_client.send(date.encode('utf-8'))
# 接收服务端发送的数据,并打印
data_recv = tcp_client.recv(1024)
print(data_recv.decode('utf-8'))
运行如下:
客户端:
服务端: