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

Python的网络编程函数库socket详解及应用实例

发布时间:2023-06-17 22:23:06

Python的socket库是一个基于TCP或UDP协议进行网络编程的函数库,通过它可以实现网络通讯。在本文中,我们将详细介绍socket库的常用函数以及应用实例。

一、socket常用函数

1. socket()函数

用于创建一个socket对象,如下所示:

s = socket.socket(family, type, proto)

其中,family 表示协议族,常用的有 AF_INET(IPv4协议)和 AF_INET6(IPv6协议)两种;type 表示套接字的类型,常用的有 SOCK_STREAM(流式套接字,基于TCP协议)和 SOCK_DGRAM(数据报套接字,基于UDP协议)两种;proto 表示传输协议,通常为0,表示默认设置。

2. bind()函数

将socket绑定到一个特定的地址和端口号,如下所示:

s.bind(address)

其中,address为一个元组类型的IP地址和端口号,如('localhost', 8888)。

3. listen()函数

用于监听连接请求,类似于电话的接听,如下所示:

s.listen(backlog)

其中,backlog为等待连接的最大数量。

4. accept()函数

接受连接请求并返回一个新的socket对象,可以用于传输数据。如下所示:

clientsocket,addr = s.accept()

其中,clientsocket表示一个新的socket对象,用于处理客户端请求;addr表示客户端的IP地址和端口号。

5. connect()函数

用于建立与服务器的连接,如下所示:

s.connect(address)

其中,address表示远程服务器的IP地址和端口号。

6. recv()函数

接收数据,如下所示:

s.recv(bufsize)

其中,bufsize表示每次接收的最大字节数。

7. send()函数

发送数据,如下所示:

s.send(bytes)

其中,bytes表示要发送的数据,必须是字节类型。

二、应用实例

下面我们通过一个简单的聊天室程序来演示socket库的应用。

# -*- coding: utf-8 -*-
import socket
import threading
 
def receive(s):
    while True:
        data = s.recv(1024).decode('utf-8')
        print(data)
 
def send(s):
    while True:
        data = input()
        s.send(data.encode('utf-8'))
 
def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost',8888))
 
    t1 = threading.Thread(target=receive, args=(s,))
    t2 = threading.Thread(target=send, args=(s,))
 
    t1.start()
    t2.start()
 
if __name__ == '__main__':
    main()

上面的代码创建了一个客户端socket,连接到本地的8888端口,然后启动两个线程,一个用于接收服务器发送的消息,另一个用于发送消息到服务器。

启动程序后,在命令行中输入要发送的消息即可,消息会发送到服务器,然后被广播到所有客户端。当有其他客户端发送消息时,当前客户端也会接收到消息。这就是一个简单的聊天室程序的实现。

最后,我们总结一下Python中socket库的应用,包括创建socket对象、绑定、监听、连接、发送和接收数据等常用函数,以及一个简单的聊天室程序的实现。