使用Python的socket库进行网络通信的函数和实例
Python的socket库是专门用于网络通信的库,可以实现进程之间的通信和不同主机之间的通信。下面介绍几个常用的socket库函数和实例。
1. socket函数
socket函数用于创建一个socket对象,并返回该对象的文件描述符。它的语法是:
socket(socket_family, socket_type, protocol = 0)
其中,socket_family可以是AF_UNIX或AF_NET,分别指定Unix域套接字和TCP/IP协议族。socket_type可以是SOCK_STREAM或SOCK_DGRAM,分别指定流式套接字和报式套接字。protocol参数指定套接字的协议,一般默认为0即可。
2. bind函数
bind函数将socket对象绑定到地址和端口上。它的语法是:
bind((host, port))
其中,host表示要绑定的主机名或IP地址,port表示要绑定的端口号。如果host为空,socket将绑定到任何可用地址上。
3. listen函数
listen函数用于设置监听模式。它的语法是:
listen(backlog)
其中,backlog表示同时能接受的连接数,如果超过这个数目,就会拒绝连接。一般来说,这个数值设置为5~10即可。
4. accept函数
accept函数用于接收客户端的连接请求,并返回一个新的socket对象和客户端的地址。它的语法是:
accept()
返回值是一个元组,其中第一个元素是新的socket对象,第二个元素是客户端的地址,包括IP地址和端口号。
5. connect函数
connect函数用于连接到指定的主机和端口。它的语法是:
connect((host, port))
其中,host表示要连接的主机名或IP地址,port表示要连接的端口号。如果连接成功,返回值为0,否则会抛出异常。
6. send函数
send函数用于发送数据到服务器。它的语法是:
send(data)
其中,data表示要发送的数据,可以是一个字符串或一个字节串。
7. recv函数
recv函数用于接收服务器发送的数据。它的语法是:
recv(bufsize)
其中,bufsize表示一次最多接收的字节数。返回值是一个字节串,表示接收到的数据。
下面给出一个使用socket库进行简单通信的实例。
# Server端代码
import socket
HOST = 'localhost' # 服务器IP地址
PORT = 8888 # 服务器端口号
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建socket对象
s.bind((HOST, PORT)) # 绑定地址和端口
s.listen(5) # 设置监听模式,同时能接受5个连接
while True:
conn, addr = s.accept() # 接受客户端的连接请求
print('Connected by', addr)
conn.send(b'Welcome to the server!
') # 发送欢迎信息
while True:
data = conn.recv(1024) # 接收客户端发送的数据
if not data:
break
conn.send(data) # 将接收到的数据原样返回
conn.close() # 关闭连接
# Client端代码
import socket
HOST = 'localhost' # 服务器IP地址
PORT = 8888 # 服务器端口号
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建socket对象
s.connect((HOST, PORT)) # 连接到服务器
while True:
data = input('Please enter your message:') # 从标准输入读入一行数据
s.send(data.encode()) # 将数据发送到服务器
data = s.recv(1024) # 接收服务器返回的数据
print('Received:', data.decode()) # 输出接收到的消息
if data.decode() == 'bye':
break
s.close() # 关闭连接
以上代码实现了一个简单的双方通信程序,在Client端输入一行数据,Server端接收后原样返回,然后Client端再接收到返回结果。
