【问题标题】:Python Socket - Use Client in Seperate FunctionPython Socket - 在单独的函数中使用客户端
【发布时间】:2014-08-26 19:36:32
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

    标签: python multithreading sockets tkinter python-sockets


    【解决方案1】:

    问题是在最后一行:

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

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

    实际上是 逗号 组成了元组。 (除了特殊的空元组语法:())例如,这样创建一个元组:

    seq = 1, 2, 3
    

    尾随逗号也是允许的,这就是你如何用单个元素创建一个元组。

    seq = 1,
    

    括号只是为了让python不认为逗号是参数分隔符。

    Tuples and Sequences

    【讨论】:

    • 谢谢,只是出于好奇,你为什么要这样做?
    • @danielalexander 我用解释编辑我的答案。
    猜你喜欢
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    相关资源
    最近更新 更多