Тип Ошибка при попытке сокета из-за чтения хоста 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()
В основном вам нужно использовать объект сокета, а не определение класса экземпляра