【问题标题】:How to extract interger from a string如何从字符串中提取整数
【发布时间】:2017-07-07 18:02:08
【问题描述】:

我试图找到这两个数字的总和。这些是我的服务器和客户端代码,我想要的结果是

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

服务器:

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

【问题讨论】:

    标签: python sockets server client


    【解决方案1】:

    您的打印语句在您的循环中,并且每次都将 sum 设置为新值,而不是增加适当的数量。试试这个:

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

    【讨论】:

    • 收到此错误...TypeError: +=: 'int' and 'str' 的操作数类型不受支持
    • @user7576454 将对recv() 的调用封装在对int() 的调用中。我编辑了答案以包含它。抱歉,我没有意识到 recv() 正在返回什么。您在原始代码中没有收到该错误的原因是您立即打印它而没有尝试对其进行数学运算。
    • 宾果游戏,它的工作......!!!但是如何避免多个输出:收到的客户:总和 12 收到的客户:总和 46 我只需要第二个输出
    • @user7576454 你有没有像我一样把打印拉到你的 for 循环之外?仔细检查你的缩进。如果打印在 for 循环之外,您应该只在所有值相加后才能获得最终输出。
    • 有没有办法避免使用 'foo' 和用户输入数字?
    猜你喜欢
    • 2020-07-06
    • 2020-07-20
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多