热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python局域网通信_python实现同一局域网下传输图片

简述Python可以通过网络套接字来进行传输图片这点还是比较有意思的。下面用TCP来进行实现,适用于Python3代码功能简述下面代码实现了在一个电脑上发

简述

Python可以通过网络套接字来进行传输图片

这点还是比较有意思的。

下面用TCP来进行实现,适用于Python3

代码功能简述

下面代码

实现了在一个电脑上发送图片(Sender)

实现了在另外一个电脑(也可以是同一个电脑上的不同端口)接受图片(Reciever)

只发一次,然后只收一次

新图片会在旧图片上多一个 “new_”前缀

必须要先开接受者代码才行,之后再启动发送者代码(不然发送者代码会直接被拒绝)

下面是固定了在一个电脑上(看ip地址,下面写的是127.0.0.1,如果是其他电脑就写其他电脑上的ip地址)

另外本程序只能在同一个局域网下使用(就算是广域网上,那就必须要使用广域网的ip地址)

代码

【后附解析】

Sender.py (发送者)

import socket

import os

import sys

import struct

def sock_client():

try:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(('127.0.0.1', 6666))

except socket.error as msg:

print(msg)

print(sys.exit(1))

while True:

filepath = input('input the file: ')

# filepath = 'test.png'

fhead = struct.pack(b'128sl', bytes(os.path.basename(filepath), encoding='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))

break

s.send(data)

s.close()

break

if __name__ == '__main__':

sock_client()

Reciever.py (接受者)

import socket

import os

import sys

import struct

def socket_service():

try:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

s.bind(('127.0.0.1', 6666))

s.listen(10)

except socket.error as msg:

print(msg)

sys.exit(1)

print("Wait")

while True:

sock, addr = s.accept()

deal_data(sock, addr)

break

s.close()

def deal_data(sock, addr):

print("Accept connection from {0}".format(addr))

while True:

fileinfo_size = struct.calcsize('128sl')

buf = sock.recv(fileinfo_size)

if buf:

filename, filesize = struct.unpack('128sl', buf)

fn = filename.decode().strip('x00')

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 = sock.recv(1024)

recvd_size += len(data)

else:

data = sock.recv(1024)

recvd_size = filesize

fp.write(data)

fp.close()

sock.close()

break

if __name__ == '__main__':

socket_service()

解析:

发送者代码:

还是先创建TCP套接字,并发起连接:



推荐阅读
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
author-avatar
小甜甜小小郭
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有