Ошибка типа при попытке подключения к сокету из-за чтения хоста 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'

Не мог бы кто-нибудь из вас помочь мне разобраться, что происходит с моим кодом? Заранее спасибо! :)

вы, наверное, имеете в виду socket.socket() (создать экземпляр объекта!): опечатка

Jean-François Fabre 10.08.2018 15:54
1
1
1 073
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
s = socket.socket

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

s = socket.socket()

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

заменять

s = socket.socket

с

s = socket.socket()

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

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