1.导入需要的模块
import socket # 网络通信
import struct # 处理数据
2.建立Socjet连接
# 创建套接字对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
server_address = ('服务器IP地址', 端口号)
client_socket.connect(server_address)
3.打开图片及修改文件二进制格式
# 打开图片文件并读取数据
image_file = open('图片文件路径', 'rb')
image_data = image_file.read()
image_file.close()
4.进行发送图片大小
# 发送图片大小信息
image_size = len(image_data)
client_socket.send(struct.pack('!I', image_size))
5. 进行图片发送
# 发送图片数据
client_socket.send(image_data)
6.接收响应
# 接收服务器响应
response = client_socket.recv(1024)
7.关闭连接
# 关闭套接字连接
client_socket.close()
下面是全部代码的展示
# 客户端图片 import os.path import socket import sys import struct def sock_client_image(): while True: try: s = socket.socket(socket.AF_INET , socket.SOCK_STREAM) # s.connect(("服务器ip",8989)) # 服务器和客户端在不同的系统或不同的主机下时使用的ip 和端口,首先要查看服务器所在的系统网卡的ip s.connect(("192.168.9.122",6666)) # 服务器和客户端都在一个系统下时使用的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) # 将图片以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() if __name__ == '__main__': sock_client_image()