Python Client()缺少2个必需的位置参数:';康涅狄格州';和';地址';

Python Client()缺少2个必需的位置参数:';康涅狄格州';和';地址';,python,Python,错误 我面临着错误 回溯(最近一次呼叫最后一次): 文件“C:/Users/zaeem/PycharmProjects/socketprogramming/main.py”,第40行,在 开始() 文件“C:/Users/zaeem/PycharmProjects/socketprogramming/main.py”,第29行,开始 线程(target=Client(),args=(conn,addr)) TypeError:客户端()缺少2个必需的位置参数:“conn”和“addr” 您正在该

错误 我面临着错误

回溯(最近一次呼叫最后一次): 文件“C:/Users/zaeem/PycharmProjects/socketprogramming/main.py”,第40行,在 开始() 文件“C:/Users/zaeem/PycharmProjects/socketprogramming/main.py”,第29行,开始 线程(target=Client(),args=(conn,addr)) TypeError:客户端()缺少2个必需的位置参数:“conn”和“addr”


您正在该行中调用客户端函数-您需要的是:

import threading
import time

Host = socket.gethostbyname(socket.gethostname())
port = 4444
Recived_Bytes = 1024
Format = 'utf-8'


def Client(conn, addr):
    print(f" New Client Connected : {addr} Connected : ")
    connected = True
    while connected:
        length = conn.recv(Recived_Bytes).decode(Format)
        length = int(length)
        if length:
            msg = conn.recv(length).decode(Format)
            print(f"[Client {addr}says : ]{msg}")
            if msg == "disconnect" or msg == "Disconnect" or msg == "DISCONNECT":
                connected = False
    conn.close()


def start():
    sever.listen()
    while True:
        conn, addr = sever.accept()
        thread = threading.Thread(target=Client(), args=(conn, addr))
        thread.start()
        print("Connection : ")


if __name__ == '__main__':
    print("Hello Zaeem ")
    print(Host)
    ADDR = (Host, port)
    sever = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sever.bind(ADDR)
    start()
请注意,在这里您省略了Client之后的()命令-因此您不想调用Client,您只是传递了对Client函数的引用


正如我在评论中提到的,使用
Client
作为名称会误导了解Python的人,建议函数使用
lowercase
snake\u case
,并使用大写名称(所谓的
CamelCase
)应仅用于类。

您正在该行中调用客户端函数-您需要的是:

import threading
import time

Host = socket.gethostbyname(socket.gethostname())
port = 4444
Recived_Bytes = 1024
Format = 'utf-8'


def Client(conn, addr):
    print(f" New Client Connected : {addr} Connected : ")
    connected = True
    while connected:
        length = conn.recv(Recived_Bytes).decode(Format)
        length = int(length)
        if length:
            msg = conn.recv(length).decode(Format)
            print(f"[Client {addr}says : ]{msg}")
            if msg == "disconnect" or msg == "Disconnect" or msg == "DISCONNECT":
                connected = False
    conn.close()


def start():
    sever.listen()
    while True:
        conn, addr = sever.accept()
        thread = threading.Thread(target=Client(), args=(conn, addr))
        thread.start()
        print("Connection : ")


if __name__ == '__main__':
    print("Hello Zaeem ")
    print(Host)
    ADDR = (Host, port)
    sever = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sever.bind(ADDR)
    start()
请注意,在这里您省略了Client之后的()命令-因此您不想调用Client,您只是传递了对Client函数的引用


正如我在评论中提到的,使用
Client
作为名称会误导了解Python的人,建议函数使用
lowercase
snake\u case
,并且大写名称(所谓的
CamelCase
)只能用于类。

target=Client()
是对函数的直接调用,在主线程中没有参数。您只需要
target=Client
将函数本身传递给线程。还要注意,调用函数
Client
并不好-大多数阅读代码和熟悉python的人都会认为
Client
是一个类,由于建议函数使用
小写
snake\u case
target=Client()
是对函数的直接调用,在主线程中没有参数。您只需要
target=Client
将函数本身传递给线程。还要注意,调用函数
Client
并不太好-大多数阅读代码和熟悉python的人都会认为
Client
是一个类,因为建议函数使用
lowercase
snake\u case