You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Socket客户端如何通过命令行传递host与port参数

问题原因及修复方案

核心问题1:端口参数类型错误

sys.argv获取的所有命令行参数默认都是字符串类型,而socket.connect方法要求端口参数为整数类型。你硬编码时传入的是80(int类型),命令行传入的是"80"(str类型),类型不匹配触发异常,所以返回False。

核心问题2:代码结构错误

你当前的代码结构存在两个不合理的地方:

  • if __name__ == '__main__'判断写在了client类内部,导致每次导入/运行文件都会先输出client is not implemented yet的提示
  • connectTcp是全局定义的函数,不需要通过client.的方式调用,你当前的写法本质是调用了类外的全局函数,属于巧合运行

正确实现代码

修改后的完整代码如下:

from socket import *
import sys

def connectTcp(host, port):
    try:
        a = socket(AF_INET, SOCK_STREAM)
        host_address = gethostbyname(host)
        a.connect((host_address, port))
        a.close()
        return True
    except:
        return False

if __name__ == '__main__':
    # 提前校验参数数量,避免索引异常
    if len(sys.argv) < 3:
        print("使用方式:python client.py <host> <port>")
        sys.exit(1)
    host = sys.argv[1]
    # 把端口参数转为int类型
    port = int(sys.argv[2])
    retval = connectTcp(host, port)
    if retval:
        print("Connection established correctly")
    else:
        print("Some error")

运行验证

执行命令:python client.py www.google.com 80即可得到和硬编码一致的运行结果。

内容的提问来源于stack exchange,提问作者sharb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:48:01