为什么这不能将我连接到我的服务器?

Why does this not connect me to my server?

我正在尝试建立与 server.py 的连接,但 client.py 输出此错误

Traceback (most recent call last):
  File "C:\Users\Nathan\Desktop\Coding\Langs\Python\Projects\Chatting Program\Client.py", line 15, in <module>
    clientsocket.connect((host, port)) # Connects to the server
TypeError: an integer is required (got type str)

这是我的代码...

## CLIENT.PY
from socket import *
import socket

host = input("Host: ")
port = input("Port: ")
#int(port)

username = input("Username: ")
username = "<" + username + ">"
print(f"Connecting under nick \"{username}\"")

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Creates socket
clientsocket.connect((host, port)) # Connects to the server

while True:
    Csend = input("<MSG> ") # Input message
    Csend = f"{username} {Csend}" # Add username to message
    clientsocket.send(Csend) # Send message to ONLY the server

如果我的 server.py 有问题,那么这里是

的代码
## SERVER.PY
from socket import *
import socket
import select

host_name = socket.gethostname()

HOST = socket.gethostbyname(host_name) 
PORT = 12345

print(f"Server Info\nHOST: {HOST}\nPORT: {PORT}")

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind((HOST, PORT))
serversocket.listen(5)
clientsocket, address = serversocket.accept()

print(address)
with clientsocket:
    while True:
        Srecv = clientsocket.recv(1024)
        print(f"{username} - {address}: {Srecv}")
        # Add server time to message before sending
        clientsocket.sendall(Srecv)

我试过将主机和端口转换为str、int和float,但只能成功转换为str。任何帮助将不胜感激。提前致谢!

编译错误相当正常:input() returns 端口号的字符串,而您的函数需要一个整数。您可以通过将端口转换为整数来解决这个问题 - 您的评论很接近:

port = int(port).

如果您查看 python 文档,input() 总是 returns 一个字符串。传递给 clientsocket.connect() 的元组中的第二个值必须是整数,但是,您传递的是字符串值。您必须首先使用以下代码转换您的端口:

port = int(port).

#OR

port = int(input("Port: "))

经常查看文档!