TCP 的概念
TCP 的英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。
socket 的概念
socket (简称 套接字) 是进程之间通信一个工具,进程之间想要进行网络通信需要基于这个 socket。它负责进程之间的网络数据传输,好比数据的搬运工。不夸张的说,只要跟网络相关的应用程序或者软件都使用到了 socket 。
客户端
下面是一个开发TCP应用程序客户端的一般流程,后面见具体代码:
创建客户端套接字对象
和服务端套接字建立连接
发送数据
接收数据
关闭客户端套接字
from socket import *
class Cilent_Socket:
def __init__(self):
self.tcp_client_socket = socket(AF_INET, SOCK_STREAM) # AF_INET指ipv4地址,SOCK_STREAM指TCP协议
self.tcp_client_socket.connect(('192.168.137.1',8989)) #连接服务端,指定服务器ip和端口
def run(self):
while True:
# 用户输入数据
send_data = input("我:")
if len(send_data)==0:
print('已断开连接!')
break
if send_data == "quit" or send_data == "exit" or send_data =='Bye'or send_data =='bye':
self.tcp_client_socket.send(send_data.encode("gbk"))
recv_data = self.tcp_client_socket.recv(4096).decode('gbk')
print('小美:', recv_data)
self.tcp_client_socket.close()
break
self.tcp_client_socket.send(send_data.encode("gbk")) # 接收对方发送过来的数据,最大接收4096个字节
recv_data = self.tcp_client_socket.recv(4096).decode('gbk')
print('小美:', recv_data)
# 关闭套接字
self.tcp_client_socket.close()
def main():
client = Cilent_Socket()
client.run()
if __name__ == '__main__':
main()复制代码
上面代码中的__init__
方法初始化了一个客户端套接字,并与服务器建立一个长连接,run()
方法中用于和后台机器人发送消息和接收机器人给你返回的消息。
服务端
创建一个服务端程序的基本步骤是:
创建服务端端套接字对象
绑定端口号
设置监听
等待接受客户端的连接请求
接收数据
发送数据
关闭套接字
要创建一个能自动回复的机器人,只要循环接收用户输入的信息,将其输入的关键词进行判断,可以后台预先给定它对应的关键词对应给用户回复的信息即可,或者调用已知已经做好的API接口。下面两种情况会分别进行介绍。
1.自定义消息关键词回复
from socket import *
import time
import random
class Server_Socket:
def __init__(self):
tcp_server_socket = socket(AF_INET, SOCK_STREAM)
tcp_server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) #设置端口复用
tcp_server_socket.bind(('', 8989)) # 绑定服务器端口
tcp_server_socket.listen(128)
self.tcp_server_socket = tcp_server_socket
self.chat_list = ['今天天气真好,和朋友出去玩一下吧','今天你学习了吗','又不知道吃什么','蓝瘦香菇','好嗨哟','去看电影吧','去吃好吃的'] # 定义初始化消息回复列