Форум сайта python.su
На сервер передаю файл, обрабатываю, хочу отправить результат обработки назад клиенту, не получается, вернее передать назад получается а вот принять уже не могу клиентом, мне приходится закрывать соединение что бы установить новое а сервер уже не может передать по старому соединению
#server from socket import * from rscan import Rscan def imag(x): text = Rscan.ima(x) #print text text = text.replace("\n"," ") return text HOST = 'localhost' PORT = 4444 s = socket(AF_INET, SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) conn, addr = s.accept() print 'Connected by', addr fil = open("i.jpg", "wb") while 1: f=conn.recv(1024) print f fil.write(str(f)) if not f: break fil.close() res = imag('i.jpg') print res conn.send(res) conn.close()
from socket import * HOST = "localhost" PORT = 4444 s = socket(AF_INET,SOCK_STREAM) s.connect((HOST, PORT)) print "Client running on %s port %s" % (HOST, PORT) fil = open("eurotext.jpg", "rb") while True: buf = fil.read(40) if len(buf) == 0: break #print buf s.send(buf) s.close()
Отредактировано sanodin (Май 9, 2014 22:16:51)
Офлайн
sanodinдолжен быть цикл с несколькими ( >= 2) состояниями
или может быть надо сделать два в одном, после передачи клиент закрывает соединение, открывает новое как сервер и ждет результата обработки?
Офлайн
Значение в байтах при приеме можно максимальное ставить или нет?
сервер
import socket import threading from rscan import Rscan def imag(x): text = Rscan.ima(x) #print text text = text.replace("\n"," ") print text return text host = "localhost" port = 44444 while True: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port)) s.listen(1) conn, addr = s.accept() dest = open('i.jpg', 'wb') data = conn.recv(30000000) dest.write(data) dest.close() res = imag('i.jpg') print res conn.send(res) conn.close()
import socket host = "localhost" port = 44444 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) source = open("eurotext.jpg",'rb') data = source.read() source.close() s.send(data) print 'Data has been sent' result = s.recv(1024) print result s.close()
Офлайн
sanodinнадо поблочно принимать
Значение в байтах при приеме можно максимальное ставить или нет?
Офлайн
Получилось, что мне надо каждый раз пакет назад слать, что б клиент его получил, как в пинг понге. А можно не по одному байту за раз пересылать? Оптимальное есть значение?
import socket import Rscan def imag(x): text = Rscan.ima(x) #print text text = text.replace("\n"," ") print text return text host = "localhost" port = 44444 while True: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port)) s.listen(1) conn, addr = s.accept() print addr dest = open('i.jpg', 'wb') while True: try: data = conn.recv(1024) conn.send('ok') dest.write(data) except: pass if data == 'not packet': print 'no' dest.close() res = imag('i.jpg') print res conn.send(res) print 'sending' conn.close() break
from socket import * HOST = "localhost" PORT = 44444 s = socket(AF_INET,SOCK_STREAM) s.connect((HOST, PORT)) print "Client running on %s port %s" % (HOST, PORT) fil = open("eurotext.jpg", "rb") #s.settimeout(0.13) while True: buf = fil.read(1024) if not buf : s.send('not packet') result = s.recv(1024) print result result = s.recv(1024) print result break s.send(buf) result = s.recv(1024) s.close()
Отредактировано sanodin (Май 11, 2014 16:11:25)
Офлайн
короче, рано те ещё серверы писать, потому что вот
sanodinда, как в пинг-понге, только там должны быть конечные автоматы
как в пинг понге
Отредактировано py.user.next (Май 11, 2014 18:25:48)
Офлайн
В общем лучше написать класс в котором реализовать конечный автомат, понял, спасибо.
Типа такого http://pi-code.blogspot.com/2009/01/11.html
Хотя можно и без класса.
Офлайн
Привет всем. Вчера наша фирма затеяла переезд из Подмосковья в Москву, всё в принципе перевезли, остались серваки. Искал хорошую компании по грузоперевозкам, чтобы довезли всё в целости и сохранности. Наткнулся на эту грузоперевозки по Москве слышал кто нибудь?
Офлайн
ocelot145
Тему попутал?
Офлайн