编程学习网 > 编程语言 > Python > Python使用Socket套接字需要传入哪些参数 ?
2025
08-20

Python使用Socket套接字需要传入哪些参数 ?


昨晚加班到快十二点,在公司茶水间啃泡面的时候,隔壁组小王突然冒出来一句:“哎,东哥,你知道 Python 里面用 socket 创建套接字得传啥参数不?我下周面试怕被问到。”我一边扒拉着泡面,一边想这不就是个面试高频题嘛,但要真让你细讲,还真得从头捋一下。

在 Python 里,咱们用 socket.socket() 这个函数来创建套接字。它需要几个关键参数,面试官常常就卡在这几个地方。第一个是 地址族(family),第二个是 套接字类型(type),第三个是 协议(proto)。这三个是核心,后面还有个比较少用的 fileno,一般不用管。

先说地址族,其实就是告诉系统你要在哪个网络层面上工作。最常见的就是 AF_INET,表示 IPv4,还有 AF_INET6,表示 IPv6。如果你要搞本地进程间通信,还有 AF_UNIX。面试的时候,直接说“日常开发基本用 AF_INET 就够了”就行,别把自己绕进去。

再说类型,这个就更耳熟能详了。常见的两个:一个是 SOCK_STREAM,对应 TCP,可靠的面向连接;另一个是 SOCK_DGRAM,对应 UDP,面向无连接。你要是应聘的岗位涉及高并发,面试官可能会追问你“为啥 TCP 是流式的”,你顺手再提一句“它保证顺序和可靠性”,那就稳了。

协议参数 proto 就相对冷门一点。大多数时候传 0 就行了,系统会根据前面你选的 family 和 type 自动推一个合适的协议,比如 TCP 或 UDP。但如果你要精细化指定,确实可以填,比如 IPPROTO_TCP,IPPROTO_UDP 之类。不过老实说,绝大多数业务场景没人手动写。

举个代码小例子就更清楚了:

这几个参数组合起来,其实就是告诉系统“我要在 IPv4 网络上,用 TCP 协议,帮我整一个套接字”。有点像你去餐厅点餐,说“我要个牛肉面,加点辣,汤要多”,服务员就知道怎么给你安排。

不过我还记得有一次,凌晨在机房调 bug,我 socket 创建好之后 bind 的时候死活报错“Address already in use”。后来才发现是我端口没释放,或者说老连接还在 TIME_WAIT 状态。这时候有个小技巧,在创建 socket 后面加一句:

这样端口可以快速重用,不然你得等个几十秒才行。面试官要是刁钻点,问你“怎么解决端口占用问题”,你说这个就八九不离十。

再回到正题,参数里还有个 fileno,其实是给你传一个已经存在的文件描述符,直接把它包装成 socket 对象。这个日常真不常用,更多是框架级别的应用才会用,比如你写服务器要复用现有的文件描述符,才会碰到。

你要是想讲得更自然点,可以把场景带进去,比如说你写一个聊天室程序,客户端就是 AF_INET + SOCK_STREAM,用 TCP 保证消息不会丢;如果只是搞个简单的局域网心跳检测,用 SOCK_DGRAM 就够了。面试官听到你能结合场景说,肯定加分。

我当年在面试一个金融项目时,HR 问到这个问题,我还顺嘴提了一下:“其实 UDP 在实时行情推送里用得不少,速度快,不用建立连接,但要自己处理丢包。”当时技术面官眼睛一亮,后来聊着聊着就过了。很多时候就是这么个“懂点场景”的加分。

最后再唠一句,别背答案,socket 参数没几个,重点在于你能不能顺下来,顺的时候还能带点应用场景。这样面试官觉得你不是光看书,而是真的写过。

以上就是“Python使用Socket套接字需要传入哪些参数 ?的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取