0

我正在开发一个基本的服务器登录系统,它几乎可以用于任何事情,问题是当你定义客户端时,例如:

client, address = socket.accept()
data = client.recv(1024)
print(data)

所以你可以很容易地做到这一点,但我想做的是这样的:

def clientPrint(client):
    while 1:
        data = client.recv(1024)
        print(data)
while 1:
    client, address = socket.accept()
    Thread(target=clientPrint, args=(client)).start()

如您所见,我想在另一个函数中使用客户端,但随后出现此错误:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Python34\lib\threading.py", line 920, in _bootstrap_inner
    self.run()
  File "C:\Python34\lib\threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
TypeError: clientRecv() argument after * must be a sequence, not socket

这只是我想要做的一个粗略的想法,所以无论如何我可以在我想要的功能中使用套接字客户端吗?如果有人能找到我的解决方案,我将非常感激!如果您需要更多代码来更好地了解我想要的内容,请在评论中提出,我会添加它。我已经到处寻找类似的东西,但遗憾的是我没有找到任何东西。

提前致谢!

4

1 回答 1

1

问题是在最后一行:

Thread(target=clientPrint, args=(client)).start()

(client)不创建元组。要创建包含单个项目的元组,您需要将其更改为(client,)

实际上是逗号构成了元组。(除了特殊的空元组语法:)()例如,这会产生一个元组:

seq = 1, 2, 3

尾随逗号也是允许的,这就是使用单个元素创建元组的方式。

seq = 1,

括号只是在那里,以便 python 不认为逗号是参数分隔符。

元组和序列

于 2014-07-06T00:39:38.827 回答