一、Socket协议
Socket是对TCP/IP协议的封装,它是一种通信协议,是应用层与传输层之间的接口。Socket协议是一种TCP/IP协议族的一部分,用于在互联网中建立客户端和服务器之间的通信。它建立在IP协议之上,通过TCP或UDP协议进行数据传输。其中,TCP协议提供了可靠的、面向连接的通信方式,能够保证数据的正确传输;而UDP协议则是一种无连接的协议,它不保证数据的正确传输,但可以提供更快的传输速度。
基于Socket,可以实现许多不同的通信协议,常见的协议有TCP协议,UDP协议,HTTP协议,HTTPS协议,FTP协议,SMTP协议,DNS协议,SSH协议,Telnet协议,还有许多其他的协议可以使用Socket接口来实现。
Socket通信的基本流程如下:
1、创建Socket:在应用程序中创建一个Socket对象,指定协议(如TCP或UDP)和端口号。
2、绑定Socket:将Socket绑定到本地IP地址和端口号。
3、监听连接:如果是一个服务器,监听来自客户端的连接请求;如果是一个客户端,向服务器发起连接请求。
4、接收/发送数据:在Socket连接建立后,可以接收和发送数据。
5、关闭Socket:完成数据传输后,关闭Socket连接。
二、Pyhton实现
下面我们使用python自带的socket库进行TCP Socket的客户端、服务端的实现。
import socket
def create_tcp_socket(host, port):
# 创建tcp socket 对象 / socket 的实例化
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # SOCK_STREAM 是tcp的套接字
# 绑定IP地址和端口号
server_socket.bind((host, port)) # 元组格式
# 监听连接
server_socket.listen(1)
print("Waiting for client connection...")
while True:
# 获取客户端连接
client_socket, client_address = server_socket.accept()
print("Client connected:", client_address)
# 接收客户端消息
try:
while True:
data = client_socket.recv(1024).decode("utf-8") # tcp的消息接收用的是recv
print("Received message:", data)
if data == '周杰伦':
msg = '在练歌'
elif data == '彭于晏':
msg = '在健身'
else:
msg = '没消息'
client_socket.sendall(msg.encode("utf-8")) # tcp是发送用的是sendall
except ConnectionAbortedError:
client_socket.close()
continue
if __name__ == '__main__':
re_host = '127.0.0.1'
re_port = 8995
create_tcp_socket(re_host,re_port)
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ("127.0.0.1",8995)
client_socket.connect(server_address)
client_socket.sendall('彭于晏'.encode("utf-8"))
res = client_socket.recv(1024).decode("utf-8")
print("第一次接口的回调数据:", res)
client_socket.sendall('吴亦凡'.encode("utf-8"))
res = client_socket.recv(1024).decode("utf-8")
print("第二次接口的回调数据:", res)
client_socket.sendall('周杰伦'.encode("utf-8"))
res = client_socket.recv(1024).decode("utf-8")
print("第三接口的回调数据:", res)
client_socket.close()