不爱学习的刘同学

导航

TCP

TCP

传输控制协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议

 

一.TCP的客户端和服务端

客户端:客户也就是你,客服端也就是你这一端可以接触到的程序,手机app,web网页等,我们可以在客户端的界面上向服务器发送请求以及数据,交给服务器处理
服务端:也就是提供为客户端提供“服务”,接收并储存客户端发送过来的数据或请求,并且对请求进行响应,发送数据给客户端

 

二.TCP客户端向服务端发送请求

import socket

创建tcp套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

链接需要通讯的ip和端口
tcp_socket.connect('192.168.1.1',7890)

发送数据
tcp_socket.send(b'qwer')

关闭tcp套接字
tcp_socket.close()

三.TCP服务端接收数据并返回数据

TCP服务端就是将TCP客户端改变成一个长时间接收请求的客户端


import socket


def main():
"""
1.创建TCP套接字 socket
2.绑定本地信息 bind
3.让默认的套接字由主动变为被动 listen
4.等待客户端链接 accept
5.接收数据
6.回复客户端
7.关闭服务器
:return:
"""
# 1 创建TCP服务端的套接字
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2 TCP服务端套接字绑定本地信息
tcp_server_socket.bind(('',7890))

# 3 listen(128)==>监听的请求数
tcp_server_socket.listen(128)
print("_______________1_______________")
# 4 等待客户端链接,拆包。client_socket是与客户端新建立的一个套接字,client_Addr保存的是客户端的信息。
client_socket,client_Addr = tcp_server_socket.accept()
print("_________________2_______________")

# 5 接收客户端发送的信息
recv_data = client_socket.recv(1024)
print(recv_data.decode('utf-8'))
# 6 向客户端回复成功接收
client_socket.send('OK'.encode('utf-8'))

# 7 关闭服务端
tcp_server_socket.close()

 

if __name__ == '__main__':
main()

注意:用到两个套接字,tcp_server_scoket是创建本地服务端的套接字用来监听和接收客服端请求
client_socket是接收到客户端发送的请求,新建立的一个套接字,用来和客户端交互

 

四.服务端处理多个客户端的请求

import socket


def main():
# 创建TCP套接字
tcp_scoket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 绑定本地信息
tcp_scoket.bind(('',7890))

# 监听客户端请求
tcp_scoket.listen(128)


while True:
# 接收客户端请求
client_socket,client_Addr= tcp_scoket.accept()
print('接收到客户端请求')
while True:
# 接收客户端发送的内容
tcp_data = client_socket.recv(1024)
print(tcp_data.decode("utf-8"))
if tcp_data:
# 给客户端回复消息
client_socket.send("ok".encode('utf-8'))
else:
print("客户端结束")
break

client_socket.close()
# 关闭服务端

tcp_scoket.close()

if __name__ == '__main__':
main()

 

五.TCP之间的通讯原理

TCP客户端之间的通讯是基于TCP服务端完成的

TCP1客户端 connect(TCP服务端ip、端口) ===> TCP服务端 43.158.45.4:7788 accept()保存TCP客户端信息

TCP2客户端 connect(TCP服务端ip、端口) ===> TCP服务端 43.158.45.4:7788 accept()保存TCP客户端信息

TCP1客户端 connect(TCP服务端把TCP2的ip、端口给TCP1去链接) ==> TCP2客户端

六.TCP文件下载器

下载文件的原理:客户端向服务端发送下载请求,服务端核对下载请求,找出文件读出内容,然后向客户端发送文件内容;客户端保存文件。

客户端:
import socket

# 创建TCP客户端
tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 链接服务端
tcp_client_socket.connect(('43.458.157.4',7788))

# 向服务端发送请求
tcp_client_socket.send(b'hello')

# 接收服务端发送回来的数据
recv_data = tcp_client_socket.recv(1024) 文件大小


# 创建本地文件
file_name = input('请输入文件名')
with open(file_name,'wb') as f:
f.write(recv_data)

# 关闭套接字
tcp_client_socket.close()


服务端:
import socket

# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 绑定本地信息
tcp_server_socket.bind(('',7788))

# 监听
tcp_server_socket.listen(128)

# 接收客户端请求
tcp_client_socket,tcp_client_Addr = tcp_server_socket.accept()

# 接收客户端信息
recv_data = tcp_client_socket.recv(1024)
print(recv_data)

# 返回内容
file_data = input('请输入文件内容')

tcp_client_socket.send(file_data.encode('utf-8'))

# 关闭套接字
tcp_client_socket.close()
tcp_server_socket.close()

 

posted on 2023-01-12 00:30  不爱学习的刘同学  阅读(37)  评论(0编辑  收藏  举报