杭州网站设计 site互联网装修公司排行榜
web/
2025/10/8 11:43:52/
文章来源:
杭州网站设计 site,互联网装修公司排行榜,com域名购买,wordpress建站苏州我最近在做一个项目的时候需要把树莓派上的摄像头拍摄的图片实时传输到我的PC上我想通过socket完成这个功能我找了找网上的代码#xff0c;好多都是python2.x版本的#xff0c;或者是图片总是传不过来的#xff0c;只能自己写了一个我先附上我的源代码#xff0c;再来聊一聊…我最近在做一个项目的时候需要把树莓派上的摄像头拍摄的图片实时传输到我的PC上我想通过socket完成这个功能我找了找网上的代码好多都是python2.x版本的或者是图片总是传不过来的只能自己写了一个我先附上我的源代码再来聊一聊实现这个功能中需要注意的问题源代码server#!/usr/bin/env python
# -*- codingutf-8 -*-
import socket
import threading
import time
import sys
import os
import structdef socket_service():try:s socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)s.bind((192.168.137.9, 23456))#这里换上自己的ip和端口s.listen(10)except socket.error as msg:print(msg)sys.exit(1)print (Waiting...)while 1:conn, addr s.accept()t threading.Thread(targetdeal_data, args(conn, addr))t.start()def deal_data(conn, addr):print (Accept new connection from {0}.format(addr))while 1:fileinfo_size struct.calcsize(128sl)buf conn.recv(fileinfo_size)if buf:filename, filesize struct.unpack(128sl, buf)fn filename.strip(str.encode(00))new_filename os.path.join(str.encode(./), str.encode(new_) fn)print (file new name is {0}, filesize if {1}.format(new_filename, filesize))recvd_size 0 # 定义已接收文件的大小fp open(new_filename, wb)print (start receiving...)while not recvd_size filesize:if filesize - recvd_size 1024:data conn.recv(1024)recvd_size len(data)else:data conn.recv(filesize - recvd_size)recvd_size filesizefp.write(data)fp.close()print (end receive...)conn.close()breakif __name__ __main__:socket_service()Client#!/usr/bin/env python
# -*- codingutf-8 -*-import socket
import os
import sys
import structdef socket_client():try:s socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((192.168.137.1,23456))except socket.error as msg:print(msg)sys.exit(1)print (s.recv(1024))while 1:filepath input(please input file path: )if os.path.isfile(filepath):# 定义定义文件信息。128s表示文件名为128bytes长l表示一个int或log文件类型在此为文件大小fileinfo_size struct.calcsize(128sl)# 定义文件头信息包含文件名和文件大小fhead struct.pack(128sl, bytes(os.path.basename(filepath).encode(utf-8)),os.stat(filepath).st_size)s.send(fhead)print (client filepath: {0}.format(filepath))fp open(filepath, rb)while 1:data fp.read(1024)if not data:print ({0} file send over....format(filepath))breaks.send(data)s.close()breakif __name__ __main__:socket_client()容易出现的问题1.代码有报错解决方法检查环境检查包自己debug或者联系作者2.代码没有问题但是连接总失败解决方法第一步检查ip是否是同一局域网内Client端的ip地址第二步检查端口Client端和Server端的代码里端口必须设置一致并检查端口是否被占用第三步检查防火墙把Server端的防火墙关掉防止防火墙阻挡连接3.图片传回来了但传回来的图片有缺失修改我设置的参数“1024”改成512或者更小代价是传输图片需要花费的时间增加以上内容仅为个人的学习笔记难免有些错漏欢迎大家斧正不胜感激
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/89035.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!