Python的网络编程函数库socket详解及应用实例
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对象、绑定、监听、连接、发送和接收数据等常用函数,以及一个简单的聊天室程序的实现。
