单服务器 VS 单客户端
- 在其中一个 PowerShell 中运行命令 python3 ./tcp_server.py,服务器显示 Waiting for connection...,并监听本地主机的 TCP 6000 端口,进入等待连接状态;
- 在另一个 PowerShell 中运行命令 python3 ./tcp_client.py,服务器显示 Accept new connection from 127.0.0.1:42101,完成与本地主机的 TCP 42101 端口建立通信连接,并向客户端发送欢迎信息与询问信息,客户端接收到信息后打印输出;
- 若客户端向服务器发送字符串 Alice 与 Bob,则收到服务器的问候响应信息;
- 若客户端向服务器发送空字符串,则被要求重新输入;
- 若客户端向服务器发送字符串 exit,则收到服务器的结束响应信息;
- 客户端与服务器之间的通信连接已关闭,服务器显示 Connection from 127.0.0.1:42101 is closed,并继续监听客户端的连接请求。
单服务器 VS 多客户端
- 在其中一个 PowerShell 中运行命令 python3 ./tcp_server.py,服务器显示 Waiting for connection...,并监听本地主机的 TCP 6000 端口,进入等待连接状态;
- 在另三个 PowerShell 中分别运行命令 python3 ./tcp_client.py,服务器同时与本地主机的 TCP 42719、42721、42722 端口建立通信连接,并分别向客户端发送欢迎信息与询问信息,客户端接收到信息后打印输出;
- 三台客户端分别向服务器发送字符串 Client1、Client2、Client3,并收到服务器的问候响应信息;
- 所有客户端分别向服务器发送字符串 exit,并收到服务器的结束响应信息;
- 所有客户端与服务器之间的通信连接已关闭,服务器继续监听客户端的连接请求。
0x06 Python API Reference
socket 模块
本节介绍上述代码中用到的内建模块 socket,是 Python 网络编程的核心模块。
socket() 函数
socket() 函数用于创建网络通信中的套接字对象。函数原型如下:
- socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
- family 参数代表地址族(Address Family),默认值为 AF_INET,用于 IPv4 网络通信,常用的还有 AF_INET6,用于 IPv6 网络通信。family 参数的可选值取决于本机操作系统。
- type 参数代表套接字的类型,默认值为 SOCK_STREAM,用于 TCP 协议(面向连接)的网络通信,常用的还有 SOCK_DGRAM,用于 UDP 协议(无连接)的网络通信。
- proto 参数代表套接字的协议,默认值为 0,一般忽略该参数,除非 family 参数为 AF_CAN,则 proto 参数需设置为 CAN_RAW 或 CAN_BCM。
- fileno 参数代表套接字的文件描述符,默认值为 None,若设置了该参数,则其他三个参数将会被忽略。
创建完套接字对象后,需使用对象的内置函数完成网络通信过程。注意,以下函数原型中的「socket」是指 socket 对象,而不是上述的 socket 模块。
bind() 函数
bind() 函数用于向套接字对象绑定 IP 地址与端口号。注意,套接字对象必须未被绑定,并且端口号未被占用,否则会报错。函数原型如下:
- socket.bind(address)
- address 参数代表套接字要绑定的地址,其格式取决于套接字的 family 参数。若 family 参数为 AF_INET,则 address 参数表示为二元组 (host, port),其中 host 是用字符串表示的主机地址,port 是用整型表示的端口号。
listen() 函数 (编辑:我爱故事小小网_铜陵站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|