sorket户端向服务器传送图片

服务端:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值