2017-02-18 14 views
2

我試圖找到兩個數字的總和。這是我的服務器和客戶端的代碼,結果我要的是如何從字符串中提取整數

客戶端收到的:和46

而是我得到

客戶端收到的:和12

客戶端收到的:和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() 

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

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

收到此錯誤...類型錯誤:爲+ =不支持的操作數類型(S): '詮釋' 和 '海峽' – user7576454

+0

@ user7576454裹調用'的recv()'在呼叫到'int()'。我編輯了包含該答案的答案。對不起,我沒有意識到'recv()'返回的是什麼。你在原始代碼中沒有得到這個錯誤的原因是因爲你馬上打印它而沒有嘗試對它進行數學運算。 – Dan

+0

賓果,它的工作...... !!!但我如何避免多個輸出:客戶端已收到:總和12 已接收客戶端:總和46 我只需要第二個輸出端 – user7576454