python - 由于 python 将主机读取为元组,尝试进行套接字时出现类型错误

标签 python python-3.x sockets

哎呀,所以对于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'

你们中的任何人都可以帮我弄清楚我的代码发生了什么吗? 提前致谢! :)

最佳答案

s = socket.socket

是类 socket 的别名,所以s.connect不起作用,您需要 socket实例对象:

s = socket.socket()

(我必须承认这个错误不太容易理解)

关于python - 由于 python 将主机读取为元组,尝试进行套接字时出现类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51788085/

相关文章:

python - 从 IDLE 与 Shell 中的包导入

python - 避免模​​ block 命名空间中的子模块和外部包

python - 如何制作重复的 `numpy` 数组 View

c# - 每个套接字地址(协议(protocol)/网络地址/端口)通常只允许使用一次

node.js - Socket IO 无法发出

python - 返回不同数量的实体

python - 如何在 django 中应用 postman 过滤器?

python - Raspi 相机模块无法在单独的进程中工作

Python 日志记录,终止符作为选项

c - 在c中用套接字传输和验证证书(openssl)