gpt4 book ai didi

python使用socket实现图像传输功能

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python使用socket实现图像传输功能由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

在python中使用socket进行linux服务器与win10主机间的图像传输,供大家参考,具体内容如下 。

前提:服务器与主机需要在同一局域网内 。

使用方法:

(1)分别将下面两段代码存入对应位置 (2)先运行服务器端代码,显示Wait for Connection..................... (3)在运行客户端代码,显示input the file: (4)在(3)的输出后面复制想需要传输的图像地址即可 。

1.服务器端(我的是Linux服务器) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 服务器端server.py
import socket
import os
import sys
import struct
 
 
def socket_service_image():
     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', 8001))
         s.bind(( '改成你的服务器ip地址' , 8001 ))
         s.listen( 10 )
     except socket.error as msg:
         print (msg)
         sys.exit( 1 )
 
     print ( "Wait for Connection....................." )
 
     while True :
         sock, addr = s.accept()  # addr是一个元组(ip,port)
         deal_image(sock, addr)
 
 
def deal_image(sock, addr):
     print ( "Accept connection from {0}" . format (addr))  # 查看发送端的ip和端口
 
     while True :
         fileinfo_size = struct.calcsize( '128sq' )
         buf = sock.recv(fileinfo_size)  # 接收图片名
         if buf:
             filename, filesize = struct.unpack( '128sq' , buf)
             fn = filename.decode().strip( '\x00' )
             new_filename = os.path.join(r 'G:\reseive_images\\' + 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_image()

2.客户端(我的是win10主机) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 客户端client.py
import socket
import os
import sys
import struct
 
 
def sock_client_image():
     while True :
         try :
             s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             s.connect(( '改成服务器ip地址' , 8001 ))  # 服务器和客户端在不同的系统或不同的主机下时使用的ip和端口,首先要查看服务器所在的系统网卡的ip
             # s.connect(('127.0.0.1', 8001))  #服务器和客户端都在一个系统下时使用的ip和端口
         except socket.error as msg:
             print (msg)
             print (sys.exit( 1 ))
 
         filepath = input ( 'input the file: ' # 输入当前目录下的图片名 xxx.jpg
         fhead = struct.pack(b '128sq' , bytes(os.path.basename(filepath), encoding = 'utf-8' ),
                             os.stat(filepath).st_size)  # 将xxx.jpg以128sq的格式打包
         s.send(fhead)
 
         fp = open (filepath, 'rb' # 打开要传输的图片
         while True :
             data = fp.read( 1024 # 读入图片数据
             if not data:
                 print ( '{0} send over...' . format (filepath))
                 break
             s.send(data)  # 以二进制格式发送图片数据
         s.close()
         # break    #循环发送
 
 
if __name__ = = '__main__' :
     sock_client_image()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://blog.csdn.net/wenroudebaozi/article/details/108455435 。

最后此篇关于python使用socket实现图像传输功能的文章就讲到这里了,如果你想了解更多关于python使用socket实现图像传输功能的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com