Python套接字 - 在单独的函数中使用客户端

时间:2014-07-06 00:19:59

标签: python multithreading sockets tkinter python-sockets

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

问题在于最后一行:

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

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

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

seq = 1, 2, 3

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

seq = 1,

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

Tuples and Sequences