创建客户端的步骤如图5所示。

图5 创建客户端的步骤
从图5可以看出,对于客户端来说,首先创建套接字,之后通过创建的套接字去连接服务端,如果连接成功,则继续通过该套接字向服务端发送数据,最后关闭套接字。
客户端创建套接字的方法与服务端相同,代码如下所示。
s = socket.socket()
通过connect()方法连接服务端,该方法的格式如下所示。
socket.connect(address)
其中,参数address是服务器的信息,包括IP地址和端口号。连接服务器的代码如下所示。
- SERVER = '192.168.147.128'
- PORT = 12345
-
- s.connect((SERVER, PORT))
其中,SERVER表示服务器的IP地址,PORT表示服务器监听的端口号,最后将这两个变量组合成元组作为connect()方法的参数。如果不能成功连接服务器,connect()方法会间隔一段时间后再次尝试连接,此时代码会阻塞等待connect()的再次尝试,当尝试了一定次数后仍无法连接服务器,则connect()方法会抛出TimeoutError,即连接超时异常。如果成功连接了服务端,则代码会继续向下运行。
成功连接了服务端之后,通过sendall()方法向服务端发送数据。该方法的格式如下所示。
socket.sendall(bytes[, flags])
其中,第一个参数bytes表示要发送的数据,该数据必须是字节类型;第二个参数flags是可选参数,表示指定了发送数据时的方式,默认值是0。通过sendall()方法发送数据的代码如下所示。
s.sendall(b'Hello Server!')
在发送完数据之后,可以通过close()方法关闭套接字。
- import socket
-
- HOST = ''
- PORT = 12345
- WORDS = b'Hello Client!'
-
- s = socket.socket()
- s.bind((HOST, PORT))
- s.listen(1)
- print('Server is starting...')
-
- conn, addr = s.accept()
- print('Connected by', addr)
-
- data = conn.recv(1024)
- print('Received:', data)
-
- conn.close()
- s.close()
- print('Server closed!')
- import socket
-
- SERVER = '192.168.147.128'
- PORT = 12345
-
- s = socket.socket()
- s.connect((SERVER, PORT))
- s.sendall(b'Hello Server!')
- s.close()