网络服务端和客户端是通过套接字来进行通信的。通过套接字来创建服务端和客户端的步骤是不同的。
1 创建服务端的步骤
创建服务端的步骤如图1所示。
图1 创建服务端
首先创建和绑定套接字;接下来在创建好的套接字上监听是否有客户端通过该套接字连接服务端,如果没有连接,则一直监听,如果有连接,则接收来自客户端的连接,获取该客户端的数据并且创建新的套接字用于与该客户端后续进行的数据通信;之后在新创建好的套接字上判断客户端是否有数据发送过来,如果没有,一直等待,如果有数据则接收该数据并且显示;最后关闭创建的两个套接字。
2 服务端的实现
按照图1所示的步骤,通过代码实现服务端。
2.1 创建套接字
通过socket模块中的socket()方法实现套接字的创建。该方法的格式为
socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
其中,第一个参数family表示套接字的地址族,也就是套接字所使用的协议,AF_INET表示使用的套接字包含IP地址和端口两个属性;第二个参数type表示套接字的类型,SOCK_STREAM表示流套接字,也就是基于TCP的套接字;第三个参数proto表示协议号,一般设置为0;第四个参数fileno设置为None表示不会自动检测套接字的参数。
s = socket.socket()
从以上代码可以看出,创建套接字时,使用的都是参数的默认值,即创建了一个AF_INET的TCP套接字。
2.2 绑定套接字
通过bind()方法绑定套接字,即将AF_INET协议所需要的IP地址和端口号绑定到创建好的套接字上。该方法的格式如下所示。
socket.bind(address)
其中,address一般是包含了IP地址和端口号的元组。
使用bind()方法绑定套接字的代码如下所示。
HOST = ''
PORT = 12345
s.bind((HOST, PORT))
其中,s是“2.1 创建套接字”中创建的套接字。因为是服务器自己绑定套接字,因此无需指定服务器的IP地址HOST,只需指定监听的端口值PORT即可。