首页 > 解决方案 > 为什么 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      

出于调试目的,我添加了一些打印语句。现在这里的问题是我只向服务器发送一个字节(参见客户端的输出),但服务器从该数据返回两个列表(一个字符串),第一个是预期的,第二个是空列表。这怎么可能?这就是为什么 aValueError也在发生。虽然我在客户端得到了预期的输出,但我很想知道为什么split()返回两个列表而不是一个?

标签: python-3.xlistsplitnetwork-programming

解决方案


一切都很简单。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

推荐阅读