import socket def send_windows_udp(): """向windows 网络调试助手发送数据""" # 1 创建套接字 # 参数的介绍 socket.AF_INET:ipv4, socket.SOCK_DGRAM:udp socket_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 准备发送的内容和地址
# 注意windows的网络调试助手接收的编码类型为gbk
send_data = '我第一次发送数据!!!!!'.encode('gbk')
# 必须是元祖 前面的是ip 后面的是port
address = ('192.168.1.11', 9999)
# 2 发送数据
socket_udp.sendto(send_data, address)
# 3 接收数据
# 4 关闭套接字
socket_udp.close()def send_ubuntu_udp(): """向ubuntu 网络调试助手发送数据""" # 1 创建套接字 # 参数的介绍 socket.AF_INET:ipv4, socket.SOCK_DGRAM:udp socket_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 准备发送的内容和地址
# 注意ubuntu的网络调试助手接收的编码类型为utf-8
send_data = '我第一次发送数据!!!!!'.encode('utf-8')
# 必须是元祖 前面的是ip 后面的是port
address = ('192.168.25.140', 22222)
# 2 发送数据
socket_udp.sendto(send_data, address)
# 3 接收数据
# 4 关闭套接字
socket_udp.close()if name == 'main': send_ubuntu_udp()
测试数据str->bytesbytes->strstr - >bytestest_str = '我是文本数据'encoding_str = test_str.encode('gbk')print(type(test_str))print('-----------')# 现在的encoding_str是给电脑看的, 我们想要识别必须解码print('encoding_str:%s' % encoding_str)print(type(encoding_str))bytes_data = b'\xce\xd2\xca\xc7\xce\xc4\xb1\xbe\xca\xfd\xbe\xdd' 解码的方法 decode() 编码和解码的类型必须一致decoding_str = encoding_str.decode('gbk')print('decoding_str:%s' % decoding_str)decode_str = bytes_data.decode('gbk')print('bytes_data:%s' % bytes_data)print('-----')print(decode_str)
使用socket 发送和接收数据from socket import * 创建套接字socket_udp = socket(AF_INET, SOCK_DGRAM) 准备数据data = "第二次发送的udp数据".encode('gbk')address = ('192.168.1.11', 9999) 可以指定端口、也可以不指定如果不绑定端口,操作系统会随机分配一个,如果重新运行它的端口会发生改变如果绑定成功操作系统不会帮我们去分配会使用我们指定的socket_udp.bind(('', 12345)) # ip一般我们不指定,表示电脑的任意一个ip都行 发送数据socket_udp.sendto(data, address) 接收数据 接收数据的时候可以指定接收数据的大小 4096recv_data, ip_pot = socket_udp.recvfrom(4096) # 接收数据的方式拆包print(recv_data.decode('gbk'))print(ip_pot)recv_data = socket_udp.recvfrom(4096)[0].decode('gbk')ip_pot = socket_udp.recvfrom(4096)[1]print(recv_data)print(ip_pot) 关闭套接字socket_udp.close()
在网络通信过程中 为什么用ip和port为了能够将一个复杂的通信过程进行任务划分, 从而保证数据准确的传递""" from socket import * def send_data(socket_udp): """发送数据的函数""" data = input('请输入您要发送的内容').encode('gbk') address = ('192.168.1.11', 9999) socket_udp.sendto(data, address) def recv_data(socket_udp): """接收数据的函数""" recv_data, ip_port = socket_udp.recvfrom(4096) # 接收数据的方式拆包 print(recv_data.decode('gbk'), ip_port) def run(): socket_udp = socket(AF_INET, SOCK_DGRAM) # 不绑定端口,程序找不到会报错 socket_udp.bind(('', 54321)) while True: print('=' * 20) print('1:发送数据') print('2:接收数据') print('=' * 20) num = input('请输入您的选择序号') if num == '1': # 执行发送数据的任务 send_data(socket_udp) elif num == '2': # 接收数据并显示 recv_data(socket_udp) else: print('输入错误') break if name == 'main': run()
|