#!/usr/bin/env python
# encoding: utf-8
'''
@author: JHC
@license: None
@contact: JHC000abc@gmail.com
@file: client.py
@time: 2022/1/26 16:57
@desc:
'''
import socket
import sys
import time
HOST, PORT = "192.168.0.115", 5001
def main():
pic_opt_list = ['11.png','11.jpg']
arrBuf_list = []
# 以二进制方式读取图片
for pic_opt in pic_opt_list:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
# 包头标志
arrBuf = bytearray(b'\xff\xaa\xff\xaa')
picData = open('Client/pic/'+pic_opt, 'rb')
picBytes = picData.read()
# 图片大小
picSize = len(picBytes)
# 数据体长度 = guid大小(固定) + 图片大小
datalen = 64 + picSize
# 组合数据包
arrBuf += bytearray(datalen.to_bytes(4, byteorder='little'))
guid = 23458283482894382928948
arrBuf += bytearray(guid.to_bytes(64, byteorder='little'))
arrBuf += picBytes
arrBuf_list.append(arrBuf)
sock.sendall(arrBuf)
sock.close()
if __name__ == '__main__':
main()
server.py
#!/usr/bin/env python
# encoding: utf-8
'''
@author: JHC
@license: None
@contact: JHC000abc@gmail.com
@file: server.py
@time: 2022/1/26 16:58
@desc:
'''
import random
import socketserver
import os
import sys
import time
import threading
ip_port = ("192.168.0.115", 5001)
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
print("conn is :", self.request) # conn
print("addr is :", self.client_address) # addr
while True:
try:
self.str = self.request.recv(8)
data = bytearray(self.str)
headIndex = data.find(b'\xff\xaa\xff\xaa')
print(headIndex)
if headIndex == 0:
allLen = int.from_bytes(data[headIndex + 4:headIndex + 8], byteorder='little')
print("长度是 : ", allLen)
curSize = 0
allData = b''
while curSize < allLen:
data = self.request.recv(1024)
allData += data
curSize += len(data)
print("接受数据长度为:", len(allData))
# 接收到的数据,前64字节是guid,后面的是图片数据
arrGuid = allData[0:64]
# 去除guid末尾的0
tail = arrGuid.find(b'\x00')
arrGuid = arrGuid[0:tail]
strGuid = str(int.from_bytes(arrGuid, byteorder='little')) # for test
print("-------------请求的 guid 是: ", strGuid)
imgData = allData[64:]
name_id = random.randint(1,100)
strImgFile = "Server/pic/"+str(name_id)+"_"+str(name_id+1)+".jpg"
print("图片保存地址是: ", strImgFile)
# 将图片数据保存到本地文件
with open(strImgFile, 'wb') as f:
f.write(imgData)
f.close()
break
except Exception as e:
print(e)
break
if __name__ == "__main__":
s = socketserver.ThreadingTCPServer(ip_port, MyServer)
print("start listen")
s.serve_forever()```
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156938.html