Тип Ошибка при попытке сокета из-за чтения хоста Python в качестве кортежа

Итак, я начинающий, когда дело доходит до Python, поэтому постарайтесь не смеяться, когда увидите мой код. Я пытаюсь сделать простой сокет сервер и клиент, где я могу отправить некоторые данные от клиента на сервер и заставить его отправить его обратно. Вот:

Сервер:

import socket
def Main():
    print("--------------------------------------------------------------------------------")
    print("Please input host. If field left blank, host is localhost")
    host = input()
    if host == "":
        host = "127.0.0.1"
    print("Please input port. Now that i think about it, don't, unless told to, just leave it as is (Blank)")
    port = input()
    if port == "":
        port = 5000
    print("--------------------------------------------------------------------------------")
    #############################################################################################################################################

    s = socket.socket()
    s.bind((host,port))

    s.listen(1)
    c, addr = s.accept()
    print("Connecton from: " + str(addr))
    while True:
        data = c.recv(1024).decode("utf-8")
        if not data:
            break
        print("From connected user: " + data)
        data = data * 2 #This is just to test if it works, by doubing it
        print("Sending: " + data)
        c.send(data.encode("utf-8"))
    s.close


if __name__ == "__main__":
    Main()

Хорошо, вот мой клиент:

import socket

def Main():
    host = '127.0.0.1'
    port = 5000

    s = socket.socket
    s.connect((host,port))

    message = input("-> ")
    while message != "quit":
        s.send(message.encode("utf-8"))
        data = s.recv(1024).decode("utf-8")
        print("Recicved from server: "+ data)
        message = input("-> ")
    s.close()




if __name__ == "__main__":
    Main()

Понимаете, если я пытаюсь запустить клиент, я получаю ошибку типа:

Traceback (most recent call last):
  File "C:/Users/Napoleon/Desktop/Szymon/Python/Client.py", line 34, in <module>
    Main()
  File "C:/Users/Napoleon/Desktop/Szymon/Python/Client.py", line 20, in Main
    s.connect((host,port))
TypeError: descriptor 'connect' requires a '_socket.socket' object but received a 'tuple'

Так что любой из вас может помочь мне понять, что происходит с моим кодом. Заранее спасибо!:)

2 ответа

Решение
s = socket.socket

псевдоним класса socket, так s.connect не будет работать, вам нужен экземпляр socket объект:

s = socket.socket()

(Должен признать, ошибку не очень легко понять)

Замещать

s = socket.socket

с

s = socket.socket()

В основном вам нужно использовать объект сокета, а не определение класса экземпляра

Другие вопросы по тегам