2017-02-18 28 views
2

Ich versuche, die Summe der beiden Zahlen zu finden. Dies sind meine Codes für Server und Client, das Ergebnis, das ich will, istSo extrahieren Sie interger aus einer Zeichenfolge

Client erhalten: Sum 46

sondern ich

Client empfangen: Sum 12

Client empfangen: Sum 34

Auftraggeber:

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

Serve r:

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 

Antwort

1

Ihre print-Anweisung ist innerhalb der Schleife, und die Summe wird auf den neuen Wert jedes Mal durch gesetzt, anstatt um den entsprechenden Betrag erhöht. Versuchen Sie stattdessen:

sum = 0 

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

print "CLIENT RECEIVED : Sum ", sum 
+0

diesen Fehler ... Typeerror: nicht unterstützte Operandtyp (e) für + =: 'int' und 'str' – user7576454

+0

@ user7576454 Wickeln Sie den Aufruf 'recv()' in einem Aufruf zu 'int()'. Ich habe die Antwort bearbeitet, um das zu berücksichtigen. Tut mir leid, ich wusste nicht, was 'recv()' zurückgab. Der Grund dafür, dass Sie diesen Fehler in Ihrem ursprünglichen Code nicht erhalten haben, ist, dass Sie ihn sofort drucken, ohne zu versuchen, ihn zu berechnen. – Dan

+0

Bingo, es funktioniert ... !!! aber wie vermeide ich mehrere Ausgänge: CLIENT EMPFANGEN: Summe 12 CLIENT EMPFANGEN: Summe 46 ich brauche nur den zweiten Ausgang – user7576454

Verwandte Themen