help with sending and receiving pics taken - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Networking (https://python-forum.io/forum-12.html) +--- Thread: help with sending and receiving pics taken (/thread-22239.html) |
send a few pictures - mcgrim - Nov-05-2019 I am trying to send a few pics via socket from server to client. I get this error on the client side, and I am not sure how to fix it. here are both of my codesSERVER import cv2 import time import socket import glob import os host = "127.0.0.1" port = 5000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) s.listen(5) print("server started...") path1 = (r"C:\Users\Desktop\opencvpics") def readFileImages(): st = os.path.join(path1, "*.png") print(st) return glob.glob(st) list1=readFileImages() print(list1, "list1......") while True: c, addr = s.accept() print(f"connection from {addr} has been established !") c.send(bytes("welcome to the server".encode())) for pics in list1: f=open(pics, 'rb') while True: veri=f.read() if not veri: break s.send(veri) f.close() data = s.recv(4096) data_arr = pickle.loads(data) newrow = numpy.asarray(data_arr) myoutput = numpy.vstack([myoutput, newrow]) s.close() import socket from PIL import Image import pickle host = "127.0.0.1" port = 5000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) msg=s.recv(1024) print(msg.decode()) fname="test.png" fp = open(fname,'rb') # image while True: strng = s.recv(1024) if not strng: break fp.write(strng) im = Image.open(fp) T= im.size data=pickle.dumps(T) s.send(data) fp.close()In the client code, I tried to move 'fp.close()'before 'im=Image.open(fp)' but it would then complain about dealing with a closed file. help with sending and receiving pics taken - mcgrim - Nov-05-2019 Ignore this post, refer to this instead: https://python-forum.io/Thread-send-a-few-pictures RE: send a few pictures - mcgrim - Nov-05-2019 I kept working on the code and changed a few lines. Now I get no error, however, it looks like that the client is not fully executed, in other words, I should be able to see these two statements being printed on the last lines print('Successfully get the file') print('connection closed')but I don't. What exactly is stopping it? Here is my edited code for serve and client. SERVER import cv2 import time import socket import glob import os host = "127.0.0.1" port = 5000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) s.listen(5) print("server started...") path1 = (r"C:\Users\Desktop\opencvpics") def readFileImages(): st = os.path.join(path1, "*.png") print(st) return glob.glob(st) list1=readFileImages() print(list1, "list1......") while True: c, addr = s.accept() print(f"connection from {addr} has been established !") c.send(bytes("welcome to the server".encode())) for pics in list1: f=open(pics, 'rb') l = f.read(1024) while(l): c.send(l) print('Sent ', repr(l)) l = f.read(1024) f.close() print('Done sending') c.send('Thank you for connecting'.encode())CLIENT import socket from PIL import Image import pickle host = "127.0.0.1" port = 5000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) s.send('Hello server!'.encode()) with open('received_file.png', 'wb') as f: print('file is open') while True: print('receiving data...') data = s.recv(1024) print('data=%s', data) print('Successfully get the file') s.close() print('connection closed')By the way, this time I included my code into the code box as usual, but somehow it doesn't look like I did. I am not sure why. In addition, only one picture is received, instead of all of them. RE: help with sending and receiving pics taken - Larz60+ - Nov-05-2019 Starting a new thread on same subject is taboo see: https://python-forum.io/misc.php?action=help&hid=22 RE: help with sending and receiving pics taken - mcgrim - Nov-05-2019 sorry, I haven't thought about it. Thanks for reminding me. Can you actually please help me? I have been stuck in this for awhile, :) Can anyone help me ? RE: help with sending and receiving pics taken - mcgrim - Nov-05-2019 I continued to work on it, by turning bytes back into images, and I am now getting an error on the client side, even though the files seem to be transferred. SERVERimport cv2 import time import socket import glob import os host = "127.0.0.1" port = 5000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) s.listen(5) print("server started...") path1 = (r"C:\Users\Desktop\opencvpics") def readFileImages(): st = os.path.join(path1, "*.png") print(st) return glob.glob(st) list1 = readFileImages() print(list1, "list1......") print(type(list1)) while True: c, addr = s.accept() print(f"connection from {addr} has been established !") c.send(bytes("welcome to the server".encode())) for pics in list1: f = open(pics, 'rb') l = f.read(1024000) while (l): c.send(l) print('Sent ', repr(l)) l = f.read(1024) f.close() print('Done sending') c.send('Thank you for connecting'.encode())CLIENT import socket import cv2 from PIL import Image import io import pickle host = "127.0.0.1" port = 5000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) s.send('Hello server!'.encode()) with open('received_file.png', 'wb') as f: print('file is open') #while f: print('receiving data...') data = s.recv(1024) print('data=%s', data, "ASDFASDSADFASDFVSSDSAFSADDFDSAFD") f.write(data) print('Successfully get the files') print('connection closed') print(type(data)) print(len(data)) img = Image.open(io.BytesIO(data)) img.show() s.close()P.S. The directory in the client contains a few images, and I desire to send them all to the client. RE: help with sending and receiving pics taken - Larz60+ - Nov-05-2019 this is not something I would do very often, but here's a link to an example: https://stackoverflow.com/a/42534868 RE: help with sending and receiving pics taken - mcgrim - Nov-06-2019 can you or anyone actually figure out what is the mistake in the last code I posted? I was already aware of that link, but I need to see how "multiple" images are sent to the client (not from). RE: help with sending and receiving pics taken - mcgrim - Nov-06-2019 I noticed that the loop in line 33 on the server code only takes the first picture, when I thought it would iterate through the entire list, how so? how to fix it ? these lines alone path1 = (r"C:\Users\Desktop\opencvpics") def readFileImages(): st = os.path.join(path1, "*.png") print(st) return glob.glob(st) for i in readFileImages()[:]: f=open(i, 'rb') l=f.read() print(len(l))iterate as many times as the length of the list, but these same lines implemented in the server code above, stop after the first iteration. Why ? RE: help with sending and receiving pics taken - mcgrim - Nov-06-2019 Doesn't anyone know how to help me? I am not asking anything too demanding. Let me know if there are any problems in my way of asking, so I can rearrange. |