Python 局域网内的通信(文件传递)、XML文件的生成 文件的打开
2018-02-01 15:22
162 查看
本来是安安分分做Android的 但是前几天朋友(也是做Android的)在做Python,说是让帮忙写一个局域网内通信的Demo 当然这对于一个Java开发这来说这是很简单的事
看下运行效果
打开服务端等待连接 打开客户端后连接成功 发送命令返回响应的数据
支持原创 转载请注明 图你怀中安稳 http://blog.csdn.net/qq_32648731/article/details/79229041
需求是 python 局域网内通信 在客户端输入响应的指令 服务端返回相对应的数据 当输入指令为1 时 返回XML文件 并且显示到控制台 OK 直接上代码了
python中的局域网通信用socket库就OK了客户端
#!/usr/bin/env python # coding=utf8 # 导入需要的库 from socket import * import struct import os host = 'localhost' port = 12343 bufsiz = 1024 tcpCliSock = socket(AF_INET, SOCK_STREAM) # 开启套接字 tcpCliSock.connect((host, port)) # 连接到服务器 while True: try: data = int(input('发送指令 >> ')) # 等待输入 tcpCliSock.send(str(data)) # 发送信息 # print(data) fileinfo_size = struct.calcsize('128sl') response = tcpCliSock.recv(bufsiz) # 接受返回信息 if data == 1: filename, filesize = struct.unpack('128sl', response) fn = filename.strip('\00') new_filename = os.path.join('./', 'new_' + fn) recvd_size = 0 # 定义已接收文件的大小 fp = open(new_filename, 'wb') while not recvd_size == filesize: if filesize - recvd_size > 1024: data = tcpCliSock.recv(1024) recvd_size += len(data) else: data = tcpCliSock.recv(filesize - recvd_size) recvd_size = filesize print(data) # 保存在新的文件中 fp.write(data) fp.close() else: print(response) except: print("输入有误") tcpCliSock.close()
服务端代码
#!/usr/bin/env python # coding=utf8 import struct import xml.dom.minidom from socket import * import os def createXml(): '生成XML文件' doc = xml.dom.minidom.Document() root = doc.createElement('Devices') root.setAttribute('devices_name', '空调') root.setAttribute('devices_code', '001') doc.appendChild(root) # 设备的信息 具体应该进行读取 这个地方只是模拟 这个集合中的数据还可以来自你们的服务器 device_info_list = [{'name': '空调1', 'address': '三楼北侧', 'state': '开'}, {'name': '空调2', 'address': '三楼北侧', 'state': '开'}, {'name': '空调3', 'address': '三楼北侧', 'state': '关'}, {'name': '空调4', 'address': '三楼北侧', 'state': '开'}, ] for i in device_info_list: nodeDevice = doc.createElement('Device') nodeName = doc.createElement('name') nodeName.appendChild(doc.createTextNode(str(i['name']))) nodeAddress = doc.createElement('address') nodeAddress.appendChild(doc.createTextNode(str(i['address']))) nodeState = doc.createElement('state') nodeState.appendChild(doc.createTextNode(str(i['state']))) nodeDevice.appendChild(nodeName) nodeDevice.appendChild(nodeAddress) nodeDevice.appendChild(nodeState) root.appendChild(nodeDevice) # 保存到本地路径 path = '/Users/mr.kong/Desktop/Devices.xml' fp = open(path, 'w') doc.writexml(fp, indent='\t', addindent='\t', newl='\n', encoding="utf-8") return path host = 'localhost' port = 12343 buf_size = 1024 tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind((host, port)) tcpSerSock.listen(5) def __sendOrder_1(path, server): # 把这个文件的路径放在这里 filepath = path if os.path.isfile(filepath): # 定义定义文件信息。128s表示文件名为128bytes长,l表示一个int或log文件类型,在此为文件大小 fileinfo_size = struct.calcsize('128sl') # 定义文件头信息,包含文件名和文件大小 fhead = struct.pack('128sl', os.path.basename(filepath), os.stat(filepath).st_size) server.send(fhead) fp = open(filepath, 'rb') while 1: data = fp.read(1024) if not data: break server.send(data) while True: print('请连接') tcpCliSock, addr = tcpSerSock.accept() print('连接成功', addr) while True: data = tcpCliSock.recv(buf_size) # print(data) if data == b'1' or data == 1: # 假如是发送过来的是1 就表示将要获取设备的xml 文件 # 1、生成XML path = createXml() aef7 __sendOrder_1(path, tcpCliSock) # tcpCliSock.send("你大爷".encode()) elif data == b'2' or data == 2: tcpCliSock.send("你二大爷") elif data == b'3' or data == 3: tcpCliSock.send("三大爷") else: tcpCliSock.send("不明确指令") tcpCliSock.close() tcpSerSock.close()
看下运行效果
打开服务端等待连接 打开客户端后连接成功 发送命令返回响应的数据
支持原创 转载请注明 图你怀中安稳 http://blog.csdn.net/qq_32648731/article/details/79229041
相关文章推荐
- 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用
- python生成以及打开json、csv和txt文件的实例
- Python:生成特定内容的数据文件
- Python - 使用Pyinstaller将Python代码生成可执行文件
- 利用python生成一个导出数据库的bat脚本文件
- 生成csv文件时,2010微软excel打开乱码解决
- 生成XML文件的步骤 & 解析XML文件
- 读取INRIA 说明文件 生成 voc xml python 版本
- Poi 生成的xls后缀的Excel文件,用Excel 2003打开乱码解决方案。
- python生成xml格式文件实例
- python 使用 urllib.urlretrieve()下载网络图片,在本地打开提示文件损坏无法打开
- iOS app内部生成描述文件(三)Safari打开描述文件
- python读取html中指定元素生成excle文件示例
- Python生成exe文件
- android学习——使用SAX、DOM 和 PULL 解析xml文件,及使用pull生成xml文件
- python生成opencv正样本和负样本描述文件
- python打开文件报:'utf-8' codec can't decode错误
- fetal error C1083:无法打开编译器生成的文件:X\\Debug\\.......obj:permission denied
- APUE读书笔记-17高级进程通信-04传递文件描述符号(2)
- 使用Python3生成CSV文件遇到的问题(空行/乱码)