2017-02-18 10 views
2

私は2つの数の和を求めようとしています。これらは、サーバとクライアントのための私のコードであり、私が望む結果が受信文字列からintergerを抽出する方法

CLIENTです:合計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() 

fooの

23 
12 

答えて

1

あなたのprint文は、あなたのループ内で、かつ合計は、適切な量だけインクリメントするのではなく、それぞれの時間を通して新しい値に設定されています。代わりにこれを試してみてください:

sum = 0 

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

print "CLIENT RECEIVED : Sum ", sum 
+0

このエラーを取得... TypeError例外を:+ =のためにサポートされていないオペランドのタイプ(S): 'int型' と 'str' は – user7576454

+0

ラップuser7576454 @呼び出しのrecv 'への()'の呼び出しに'int()'に変更します。私はその答えを編集しました。申し訳ありませんが、私は 'recv()'が何を返すのか分かりませんでした。元のコードにそのエラーが表示されなかったのは、数学を試みることなくすぐに印刷していたからです。 – Dan

+0

ビンゴ、その作業... !!!しかし、私は複数の出力を避けるにはどうすればいいですか?クライアント受信:合計12 クライアント受信:合計46 私は2番目の出力だけが必要です – user7576454

関連する問題