开发者社区> 问答> 正文

为什么split()从一个字符串返回两个列表?

我正在Python 3.7.2中实现一个简单的客户端和服务器。客户端将向服务器发送两个号码,服务器将其添加并发送回客户端。

这是我的实现:

客户:-

import socket

s = socket.socket()
host = socket.gethostname()
port = 4444

a = input('Enter 1st no: ')
b = input('Enter 2nd no: ')
c = (a + ',' + b).encode()
print(c)

s.connect((host, port))
print('Sending string {} to the server'.format(c.decode()))
s.sendall(c)

data = s.recv(1024)
print(int(data))

s.close()

服务器:-

import socket

s = socket.socket()
host = socket.gethostname()
port = 4444

s.bind((host, port))
s.listen(10)
print('Waiting for connections...')
conn, addr = s.accept()


while True:
    data = conn.recv(1024)
    d = data.decode().split(',')
    print(d)
    print(type(d))
    data_add = int(d[0]) +int(d[1])
    conn.sendall(str(data_add).encode())

conn.close()

输出:-

服务器:-

Waiting for connections...
['3', '6']
<class 'list'>
['']
<class 'list'>

追溯(最近一次呼叫最近):文件“ addserver.py”,行19,位于data_add = int(d [0])+ int(d [1])ValueError:int()的无效文字,基数为10:''

客户:-

Enter 1st no: 3                 
Enter 2nd no: 6                 
b'3,6'                          
Sending string 3,6 to the server
9      

为了调试,我添加了一些打印语句。现在的问题是,我只向服务器发送一个字节(请参阅客户端的输出),但是服务器从该数据返回两个列表(一个字符串),第一个是预期的,第二个是一个空列表。这怎么可能?这就是为什么也会发生ValueError的原因。尽管我在客户端获得了预期的输出,但是我很好奇为什么split()返回两个列表而不是一个列表?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 23:29:19 613 0
1 条回答
写回答
取消 提交回答
  • 一切都很简单。当客户端关闭连接时,您将得到空的d。实际上,我看到服务器和客户端之间的关系背后的逻辑不好。我的意思是,您这样做:

    1.客户端连接到服务器

    2.客户端和服务器执行其操作:a + b

    3.客户端关闭连接,而服务器等待数据<-问题在这里!

    也许您希望每个客户端使用一个连接?是的你是。奇怪的是,如果您不这样做。

    所以...只需将conn,addr = s.accept()移到while块中:

    ... # some server init code
    #conn, addr = s.accept()
    while True:
        conn, addr = s.accept()
        data = conn.recv(1024)
        ... # some per client code
    

    回答来源:stackoverflow

    2020-03-24 23:29:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载