欢迎访问宙启技术站
智能推送

使用Python的socket库进行网络通信的函数和实例

发布时间:2023-06-14 23:50:18

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端再接收到返回结果。