sorket户端向服务器传送图片

该代码示例展示了如何使用Python的socket库创建一个服务端,监听并接收来自客户端的图像文件。服务端接收文件名和大小信息,然后逐块接收并保存图像。客户端则连接到服务端,发送指定路径的图像文件。整个过程涉及套接字通信、二进制文件读写和网络传输。
摘要由CSDN通过智能技术生成

服务端:

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(('192.168.9.138', 6666))
		s.listen(10)
	except socket.error as msg:
		print(msg)
		sys.exit(1)
	print("Wait for Connection..")

	while True:
		sock, addr = s.accept()
		deal_image(sock,addr)


def deal_image(sock,addr):

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

	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('./','new_' + fn) #图片地址

			recvd_size =0
			fp = open(new_filename,'wb')图片转2进制

			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()

客户端:

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(('0.0.0.0',8899)) #链接地址
		except socket.error as msg:
			print(msg)
			print(sys.exit(1))
		filepath = input('input the file:')
		fhead = struct.pack(b'128sq',bytes(os.path.basename(filepath),encoding='utf-8'),os.stat(filepath).st_size)
		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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值