Python Socket 网络编程基础

参考资料:[译]Python 中的 Socket 编程(指南)

What is a socket object?
A socket is an endpoint of communication—an object through which your application communicates with other Windows Sockets (Winsock) applications across a network.

下面的示意图中,我们将看到 Socket API 的调用顺序和 TCP 的数据流:
Socket API 的调用顺序和 TCP 的数据流

让我们一起来看看 API 调用发生了什么?


socket.socket() 创建了一个 socket 对象,并且支持 context manager type,你可以使用 with 语句,这样你就不用再手动调用 s.close() 来关闭 socket 了

调用 socket() 时传入的参数:
第1个参数:
AF_INET :支持 IPv4 地址族
AF_INET6:支持 IPv6 地址族

AF_INET6 sockets provide support for Internet Protocol version 6 (IPv6) 128 bit (16 byte) address structures. Programmers can write applications using the AF_INET6 address family to accept client requests from either IPv4 or IPv6 nodes, or from IPv6 nodes only.

Socket applications written with AF_INET6 address family allow Internet Protocol version 6 (IPv6) applications to work with Internet `Protocol version 4 (IPv4) applications (those applications that use AF_INET address family). This feature allows socket programmers to use an IPv4-mapped IPv6 address format. This address format represents the IPv4 address of an IPv4 node to be represented as an IPv6 address. The IPv4 address is encoded into the low-order 32 bits of the IPv6 address, and the high-order 96 bits hold the fixed prefix 0:0:0:0:0:FFFF.

第2个参数:
SOCK_STREAM:该 socket 使用TCP协议在网络中传输消息
SOCK_DGRAM:该 socket 使用UDP协议在网络中传输消息


conn, address = sever_socket.accept()
根据server_socket接收到的信息,可以让我们知道谁(哪个客户端)通过上述的socket连接到服务器,其中:
conn指的是客户端(发出连接请求)的socket
address指是的地址元组,形如(客户端的IP地址, TCP端口号)

accept()方法阻塞并等待传入连接。当一个客户端连接时,它将返回一个新的 socket 对象,对象中有表示当前连接的 conn 和一个由主机、端口号组成的 IPv4/v6 连接的元组,更多关于元组值的内容可以查看 socket 地址族中的详情

这里必须要明白我们通过调用 accept() 方法拥有了一个新的 socket 对象——conn。这非常重要,因为你将用conn这个 socket在对象和客户端之间进行通信。
与通过server_socket.listen()监听一个 socket 不同的是:
server_socket只用来接受新的连接请求
conn(通过accept() 获取的客户端 socket 连接对象),会使用一个无限 while 循环来阻塞调用 conn.recv()方法,获取客户端使用conn.sendall()conn.send()传过来的任何数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值