udp
1.发送数据
import socket
def main():
# 创建一个 udp 套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 从键盘获取数据
send_data = input('请输入要发送的数据:')
# 可以使用套接字收发数据
# 语法:udp_socket.sendto('要发送的数据', ('IP地址', 端口号))
# udp_socket.sendto(b'hahaha', ('192.168.33.53', 8080))
# 由于只能发送字节(byte)类型的数据,所以要在前面加上b,将字符串转化为byte类型
# 除了上面的处理方式外,还可以这样处理:
# 将编码格式转化为‘utf-8’,如果是windows系统,则编码格式为‘gbk’
udp_socket.sendto(send_data.encode('utf-8'),('192.168.33.53', 8080))
# 关闭套接字
udp_socke.close()
if __name__ == '__main__':
main()
循环发送数据
2.接收数据
3.发送并接收数据
我是在自己电脑上通过网络调试助手来实现的,打开网络调试助手后,点击连接,即可运行程序了
import socket
def send_msg(udp_socket):
"""发送数据"""
dest_ip = input('请输入对方的ip:')
dest_port = int(input('请输入对方的port:'))
send_data = input('请输入要发送的数据:')
udp_socket.sendto(send_data.encode('gbk'), (dest_ip, dest_port))
def rcv_msg(udp_socket):
"""接收数据"""
rcv_data = udp_socket.recvfrom(1024)
# rcv_data[0].decode('gbk'):将接收的数据解码成windows的默认编码格式:gbk编码格式
print('%s:%s' % (rcv_data[1], rcv_data[0].decode('gbk')))
def main():
# 创建套接字对象(udp_socket)
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定信息
udp_socket.bind(('', 7788))
# 循环来进行处理事情
while True:
# 发送
send_msg(udp_socket)
# 接收并显示
rcv_msg(udp_socket)
if __name__ == '__main__':
main()
优化版
import socket
def send_msg(udp_socket):
"""发送数据"""
dest_ip = input('请输入对方的ip:')
dest_port = int(input('请输入对方的port:'))
send_data = input('请输入要发送的数据:')
udp_socket.sendto(send_data.encode('gbk'), (dest_ip, dest_port))
def rcv_msg(udp_socket):
"""接收数据"""
rcv_data = udp_socket.recvfrom(1024)
# rcv_data[0].decode('gbk'):将接收的数据解码成windows的默认编码格式:gbk编码格式
print('%s:%s' % (rcv_data[1], rcv_data[0].decode('gbk')))
def main():
# 创建套接字对象(udp_socket)
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定信息
udp_socket.bind(('', 7788))
# 循环来进行处理事情
while True:
print(-----xx聊天器-----)
print('1.发送消息')
print('2.接收消息')
print('0.退出系统')
op = input("请输入功能:")
if op == '1':
# 发送
send_msg(udp_socket)
elif op == '2':
# 接收并显示
rcv_msg(udp_socket)
elif op == '0':
break
else:
print("输入错误,请重新输入...")
if __name__ == '__main__':
main()
网络调试助手界面