Python教程12
Posted jun1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python教程12相关的知识,希望对你有一定的参考价值。
Python教程12
1.udp发送数据:
import socket def main(): # 创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 第一个参数是ipv4协议,第二个参数是udp # 使用套接字发送数据,第一个参数是发送数据,第二个参数是一个元祖 # udp_socket.sendto(b"jnjhhjdik111jj5555", ("192.168.1.7", 8080)) # 使用b表示发送数据流是bit while True: # 从键盘获取数据 send_data = input("请输入要发送的数据:") if send_data == "exit": break udp_socket.sendto(send_data.encode("utf-8"), ("192.168.1.7", 8080)) # 多采用.encode("utf-8")设置数据流的编码 # 关闭套接字 udp_socket.close() if __name__ == "__main__": main()
2.udp接收数据
import socket def main(): # 1.创建套接字 udp_socket2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2.绑定本地信息,如果一个网络程序不绑定,则系统会随机分配 localaddr = ("", 7788) # ip地址和端口号,IP一般不用谢,表示本机的任何一个IP udp_socket2.bind(localaddr) while True: # 3.接收数据,1024表示接收的最大字节数 recv_date = udp_socket2.recvfrom(1024) # 4.打印接收的数据 print(recv_date) # 接收到的元组数据(b‘http://www.cmsoft.cn‘, (‘192.168.1.7‘, 8080))前面是数据信息,后面发送方的IP和端口 recv_msg = recv_date[0] # 接收到的数据 send_addr= recv_date[1] # 发送方的信息,是个元组 print("发送方信息:%s 发送的数据:%s" % (str(send_addr), recv_msg.decode("gbk"))) # 发送的英文不用解,Windows默认发送的gbk解码,Ubuntu是utf-8 # 5.关闭套接字 udp_socket2.close() if __name__ == ‘__main__‘: main()
3.udp聊天工具
import socket def send_msg(udp_socket): """发送信息""" # 定义发送的需要的信息 dest_ip = input("请输入对方的IP:") dest_port = int(input("请输入对方端口号:")) send_data = input("请输入需要发送的信息: ") udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port)) def recv_msg(udp_socket): """接收数据""" recv_data = udp_socket.recvfrom(1024) print("发送方的IP%s ,发送的信息%s" % (str(recv_data[1]), recv_data[0].decode("gbk"))) def main(): # 创建套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定信息 loacladdr = ("", 7788) udp_socket.bind(loacladdr) # 循环处理发送接收数据 while True: print("--------------XXX聊天工具-------------") print("1 .发送信息") print("2 .接收信息") print("3 .退出系统") op = input("请输入功能:") # 发送数据 if op == "1": send_msg(udp_socket) # 接收数据 elif op == "2": recv_msg(udp_socket) elif op == "0": break else: print("输入有误,请重新输入......") # 关闭套接字 if __name__ == ‘__main__‘: main()
4.tcp_client发送信息
import socket def main(): # 1.创建套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.连接服务器 # tcp_socket.connect(("192.168.1.7", 7890)) server_ip = input("请输入服务器IP:") server_port = int(input("请输入服务器的端口:")) server_addr = (server_ip, server_port) tcp_socket.connect(server_addr) # 3.发送接收数据 send_data = input("请输入要发送的数据:") tcp_socket.send(send_data.encode("gbk")) # 4.关闭套接字 tcp_socket.close() if __name__ == "__main__": main()
5.tcp_server接收、发送数据
import socket def main(): # 1.创建套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.绑定信息 tcp_server_socket.bind(("", 7890)) # 3.设置套接字为监听状态,默认都写128 tcp_server_socket.listen(128) while True: print("等待一个客户端来连接........") # 4.客户端连接 new_client_socket, client_addr = tcp_server_socket.accept() print("打印连接的客户端信息:%s" % str(client_addr)) # 循环接收、发送信息 while True: # 5.接收/发送客户端信息 recv_data = new_client_socket.recv(1024) print("打印接收到客户端的信息:%s" % recv_data.decode("gbk")) # 注意客户端未发送数据,表示客户端close,(客户端是不能发送为空值得),有数据则需要服务器处理 if recv_data: new_client_socket.send("服务器接收成功......ok ....".encode("gbk")) # Windows用gbk,Linux用utf-8 else: break # 6.关闭套接字 new_client_socket.close() print("已经服务完毕......") tcp_server_socket.close() if __name__ == ‘__main__‘: main()
6.文件下载client
import socket def main(): # 1.创建套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.获取服务器的IP和端口 dest_ip = input("请输入服务器IP:") dest_port = int(input("请输入端口:")) # 3.连接服务器 tcp_socket.connect((dest_ip, dest_port)) # 4.获取下载的文件名 download_file_name = input("请输入需要下载的文件名:") # 5.将文件名发送给服务器 tcp_socket.send(download_file_name.encode("gbk")) # 6.接收文件中的数据 recv_data = tcp_socket.recv(1024) # 如果有读取到数据,则下载,没有读取到则服务器不发送数据,接收到为空 if recv_data: # 7.保存数据到文件,新建文件多用with open with open("[新]" + download_file_name, "wb") as f: f.write(recv_data) # 8.关闭套接字 tcp_socket.close() if __name__ == ‘__main__‘: main()
7.文件下载server
import socket def send_file_2_client(new_client_socket, client_addr): file_name = new_client_socket.recv(1024).decode("gbk") print("客户端s%需要下载的文件:s%" % (str(client_addr), file_name)) print("开始发送数据给客户端.....") file_content = None # 打开文件 try: f = open(file_name, "rb") file_content = f.read() f.close() except Exception as ret: print("没有下载的文件。。。。") # 发送文件 if file_content: new_client_socket.send(file_content) def main(): tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.bind(("", 7890)) tcp_socket.listen(128) while True: new_client_socket, client_addr = tcp_socket.accept() # 调用下载方法 send_file_2_client(new_client_socket, client_addr) new_client_socket.close() tcp_socket.close() if __name__ == ‘__main__‘: main()
以上是关于Python教程12的主要内容,如果未能解决你的问题,请参考以下文章
markdown 打字稿...编码说明,提示,作弊,指南,代码片段和教程文章
如何将片段中的 ListView 对象的数据传递给 Activity?
Python 自动化 - 浏览器chrome打开F12开发者工具自动Paused in debugger调试导致无法查看网站资源问题原因及解决方法,javascript反调试问题处理实例演示(代码片段
VSCode自定义代码片段12——JavaScript的Promise对象