首页 > 解决方案 > 从命令行解析端口号

问题描述

伙计们,我正在尝试在一个简单的聊天 tcp 服务器上工作,该服务器允许从服务器和客户端发送回消息。我必须这样做,以便在命令行中输入端口号而不是硬编码。我尝试了多种方法,但这是我最近的努力。我收到关于 portnum 不是整数的错误,并且

import socket


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM);


s.bind((socket.gethostname(), 1234))
s.listen(5)

while True:
    clientsocket, address = s.accept()
    print(f"Connection from {address} has been established")
    clientsocket.send(bytes("Welocme to the server","utf-8"))

这也是我尝试更改的内容

portnum = input("Enter port number")
s.bind((socket.gethostname(), portnum))
s.listen(5)

我也尝试过:

port = sys.argv[1:] and port = int(sys.argv[1])

但我不断收到错误,但它不起作用

标签: pythonparsingargumentsport

解决方案


input将始终将用户的输入转换为字符串。https://docs.python.org/3/library/functions.html#input

您应该添加一个检查以验证输入是否为数字,将其转换为 anint并将其作为端口号传递。

while True:
    portnum = input("Enter port number")
    if portnum.isnumeric():
        portnum = int(portnum)
        s.bind((socket.gethostname(), portnum))
        s.listen(5)
        ...
    else:
        print("Enter a valid port number.")


推荐阅读