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
相关产品推荐
相关产品推荐

