2017-02-18 22 views
2

Я пытаюсь найти сумму двух чисел. Это мои коды для сервера и клиента, результат я хочуКак извлечь interger из строки

КЛИЕНТ ПОЛУЧИЛ: Sum 46

, но вместо этого я получаю

КЛИЕНТ ПОЛУЧИЛ: Sum 12

КЛИЕНТ ПОЛУЧИЛ: Sum 34

Клиент:

import socket 

def parse_file(fName): 
    list = [] 
    with open(fName) as f: 
     for line in 1f: 
      list.append(line.strip()) 
    return list 


HOST = 'localhost' # The remote host 
PORT = 50007    # The same port as used by the server 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((HOST, PORT)) 

    input_data = parse_file('foo') 

for i in input_data: 
    s.sendall(str(i)) 
    sum = s.recv(1024) 
    print "CLIENT RECEIVED : Sum ", sum 

s.close() 

Подавать г:

import socket 

def compute_sum(line): 
    result = sum(int(i) for i in line) 
    return result 

HOST = 'localhost'     # Symbolic name meaning all available interfaces 
PORT = 50007    # Arbitrary non-privileged port 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(1) 
conn, addr = s.accept() 
print 'Connected by', addr 
while 1: 
    data = conn.recv(1024) 
    if not data: break 
    print "SERVER RECIEVED : ", repr(data) 
    compute_sum(data) 

    conn.sendall(data) 
conn.close() 

Foo

23 
12 

ответ

1

Ваше заявление печати внутри цикла, и сумма создается на новое значение каждый раз через, а не увеличивается на соответствующую величину. Попробуйте вместо этого:

sum = 0 

for i in input_data: 
    s.sendall(str(i)) 
    sum += int(s.recv(1024)) 

print "CLIENT RECEIVED : Sum ", sum 
+0

получаю эту ошибку ... TypeError: неподдерживаемый тип операнда (ов) для + =: 'Int' и 'ул' – user7576454

+0

@ user7576454 Wrap вызов 'RECV()' в вызове на 'int()'. Я отредактировал ответ, чтобы включить это. Извините, я не понимал, что возвращает 'recv()'. Причина, по которой вы не получали эту ошибку в исходном коде, заключается в том, что вы сразу ее печатали, не пытаясь сделать математику. – Dan

+0

Бинго, его работа ... !!! но как я могу избежать нескольких выходов: КЛИЕНТ ПОЛУЧЕН: Сумма 12 ПОЛУЧЕННЫЙ КЛИЕНТ: Сумма 46 Мне нужен только второй вывод – user7576454