3 创建客户端的步骤
创建客户端的步骤如图5所示。
图5 创建客户端的步骤
从图5可以看出,对于客户端来说,首先创建套接字,之后通过创建的套接字去连接服务端,如果连接成功,则继续通过该套接字向服务端发送数据,最后关闭套接字。
3.1 创建套接字
客户端创建套接字的方法与服务端相同,代码如下所示。
s = socket.socket()
3.2 连接服务端
通过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,即连接超时异常。如果成功连接了服务端,则代码会继续向下运行。
3.3 发送数据
成功连接了服务端之后,通过sendall()方法向服务端发送数据。该方法的格式如下所示。
socket.sendall(bytes[, flags])
其中,第一个参数bytes表示要发送的数据,该数据必须是字节类型;第二个参数flags是可选参数,表示指定了发送数据时的方式,默认值是0。通过sendall()方法发送数据的代码如下所示。
s.sendall(b'Hello Server!')
3.4 关闭套接字
在发送完数据之后,可以通过close()方法关闭套接字。
4 完整代码
4.1 服务端完整代码
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!')
4.2 客户端完整代码
import socket
SERVER = '192.168.147.128'
PORT = 12345
s = socket.socket()
s.connect((SERVER, PORT))
s.sendall(b'Hello Server!')
s.close()