2017-02-17 49 views
0

我试图找到两个数字的总和。 这些是我的代码为服务器和客户端, 的结果,我要的是客户端收到的:和46 而是我得到 客户端收到的:和12 客户端收到的:和34在这个套接字程序中没有得到答案

客户:

# Echo client program 

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

# s.sendall('Hello, world') 
# data = s.recv(1024) 
# s.close() 
# print 'Received', repr(data) 

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

和美孚包含

12 
34 

回答

0

您从文本文件创建数字的列表,但那么只有发送(因此求和)每个数字一次一个。您可以让服务器一次收集每个数字,然后然后累加它们,或一次发送所有数字。我会推荐后者。事情是这样的:

客户

s.sendall(','.join(input_data)) 
sum = s.recv(1024) 

服务器

def compute_sum(line): 
    return sum(int(i) for i in line.split(',')) 

这将号码发送到服务器一起作为一个字符串,例如12,34。然后,服务器将对该单个字符串中的值进行求和。

+0

仍然不能保证服务器在一次调用'conn.recv()'的时候会收到所有的数字。即使客户端只调用一次's.sendall()',它仍然可能出现在多个'.recv()'中。 –

+0

@ 101得到这个输出用于编辑:客户接收:总和12,34 接收的客户:总和12,34 – user7576454

+0

@Robᵩ任何修改得到输出只有一次? – user7576454