python中,通过socket支持三种通信方式:TCP、UDP、unix进程。
TCP: 先连接,在通信。UDP:不需要连接,直接通信。
socket 常用方法:blid()、listen()、accept()、connect()、 recv()、sendall()、close()。
一、基于TCP的secket通信,实现聊天机器人
1、服务器端
# 创建服务器端socket import socket # 创建一个socket对象 sk = socket.socket() # 绑定本机IP与端口port # cmd-->ipconfig 查看ip;netstat 查看端口 sk.bind(('192.168.1.103',8088,)) # 监听:后面排队的数量 sk.listen(5) # 阻塞:等待客户端的访问请求 while True: # 始终保持等待被访问,得到:连接和访问客户端的ip与port信息。 conn,address = sk.accept() print(conn,address) # 返回:互动信息 conn.sendall(bytes("欢迎光临",encoding='utf-8')) while True: # 阻塞:始终保持等待客户端返回信息 ret = str(conn.recv(1024),encoding='utf-8') if ret == 'q': break # 回复用户信息 conn.sendall(bytes(ret+"good",encoding='utf-8'))
2、客户端
# 设置客户端socket,访问服务器 import socket # 创建对象 obj = socket.socket() # 访问服务器 obj.connect(('192.168.1.103',8088,)) # 阻塞:等待服务器的返回信息,最多返回1024个字节 receive =str(obj.recv(1024),encoding='utf-8') print(receive) # 向服务器发送信息,进行互动 while True: # 向服务器发送信息 message = input("请输入需要发送的信息:\n>>>") obj.sendall(bytes(message,encoding='utf-8')) if message == 'q': # 如果“q”,停止互动。 break else: # 否则,继续接受服务器信息。 ret = str(obj.recv(1024),encoding='utf-8') print(ret) # 关闭访问连接 obj.close()
二、基于UDP的socket通信(类代码)
# 基于UDP的socket通信 import socket # 服务器端 sk = socket.socket() sk.bind(('192.168.1.103',8080,)) while True: ret =str(sk.recv(1024),encoding='utf-8') if ret == 'q': break print(ret) # 客户端 obj = socket.socket() while True: message = input("请输入需要发送的内容:\n>>>") obj.sendto(bytes(message,encoding='utf-8'),('192.168.1.103',8080,)) if message == 'q': break