Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Обработка файла на сервере и передача клиенту [RSS Feed]

#1 Май 9, 2014 21:20:46

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Обработка файла на сервере и передача клиенту

На сервер передаю файл, обрабатываю, хочу отправить результат обработки назад клиенту, не получается, вернее передать назад получается а вот принять уже не могу клиентом, мне приходится закрывать соединение что бы установить новое а сервер уже не может передать по старому соединению

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

Офлайн

#2 Май 9, 2014 23:21:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9879
Репутация: +  853  -
Профиль   Отправить e-mail  

Обработка файла на сервере и передача клиенту

sanodin
или может быть надо сделать два в одном, после передачи клиент закрывает соединение, открывает новое как сервер и ждет результата обработки?
должен быть цикл с несколькими ( >= 2) состояниями
в состоянии передачи передал, перешёл в состояние приёма
в состоянии приёма принял, перешёл в состояние передачи

wiki. конечный автомат
wiki. пример



Офлайн

#3 Май 10, 2014 18:25:41

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Обработка файла на сервере и передача клиенту

Значение в байтах при приеме можно максимальное ставить или нет?
сервер

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

Офлайн

#4 Май 10, 2014 22:33:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9879
Репутация: +  853  -
Профиль   Отправить e-mail  

Обработка файла на сервере и передача клиенту

sanodin
Значение в байтах при приеме можно максимальное ставить или нет?
надо поблочно принимать



Офлайн

#5 Май 11, 2014 12:04:58

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Обработка файла на сервере и передача клиенту

Получилось, что мне надо каждый раз пакет назад слать, что б клиент его получил, как в пинг понге. А можно не по одному байту за раз пересылать? Оптимальное есть значение?

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)

Офлайн

#6 Май 11, 2014 18:21:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9879
Репутация: +  853  -
Профиль   Отправить e-mail  

Обработка файла на сервере и передача клиенту

короче, рано те ещё серверы писать, потому что вот

sanodin
как в пинг понге
да, как в пинг-понге, только там должны быть конечные автоматы
такой цикл, который переходит то в одно состояние, то в вдругое, то в третье
в каждом состоянии свой набор действий



Отредактировано py.user.next (Май 11, 2014 18:25:48)

Офлайн

#7 Май 11, 2014 21:13:30

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Обработка файла на сервере и передача клиенту

В общем лучше написать класс в котором реализовать конечный автомат, понял, спасибо.
Типа такого http://pi-code.blogspot.com/2009/01/11.html
Хотя можно и без класса.

Офлайн

#8 Май 30, 2014 17:18:21

ocelot145
Зарегистрирован: 2013-08-16
Сообщения: 2
Репутация: +  -1  -
Профиль   Отправить e-mail  

Обработка файла на сервере и передача клиенту

Привет всем. Вчера наша фирма затеяла переезд из Подмосковья в Москву, всё в принципе перевезли, остались серваки. Искал хорошую компании по грузоперевозкам, чтобы довезли всё в целости и сохранности. Наткнулся на эту грузоперевозки по Москве слышал кто нибудь?

Офлайн

#9 Май 30, 2014 17:21:53

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Обработка файла на сервере и передача клиенту

ocelot145

Тему попутал?



Офлайн

  • Начало
  • » Network
  • » Обработка файла на сервере и передача клиенту[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version