TCP协议
TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通信需要经过创建连接、数据传送、终止连接三个步骤。类似于日常生活中打电话的场景,需要建立链接,确认发送结果,安全传输。
下载案例:
客户端
import socket
def main():
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 强制允许端口复用
tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 链接服务器
dest_ip = input("请输入下载服务器ip:")
dest_port = int(input("请输入下载服务器port:"))
tcp_socket.connect((dest_ip,dest_port))
# 发送信息 文件名
download_file_name = input("请输入要下载的文件名:")
tcp_socket.send(download_file_name.encode("utf-8"))
# 接收文件
recv_data = tcp_socket.recv(1024)
if recv_data:
# 保存接收到的数据发到一个文件夹中
with open("[新]" + download_file_name,"wb") as f:
f.write(recv_data)
# 关闭套接字
tcp_socket.close()
if __name__ == '__main__':
main()
服务器
import socket
def send_file_2_client(new_server_socket,client_addr):
# 1.接收客户端发来的 要下载的文件名
file_name = new_server_socket.recv(1024).decode("utf-8")
print("客户端(%s)需要下载的文件名是:" % str(client_addr),file_name)
file_content = None
# 2.打开文件并读取数据
try:
f = open(file_name,"rb")
file_content = f.read()
f.close()
except Exception as ret:
print("没有要下载的文件(%s)" % file_name)
# 3.发送文件的数据给客户端
if file_content:
new_server_socket.send(file_content)
def main():
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 强制允许端口复用
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定本地信息
tcp_server_socket.bind(("",7890))
# 监听套接字状态转为被动
tcp_server_socket.listen(128)
while True:
# 等待客户端链接
new_server_socket,client_addr = tcp_server_socket.accept()
# 调用发送文件函数,完成客户端服务
send_file_2_client(new_server_socket,client_addr)
# 关闭套接字
new_server_socket.close()
tcp_server_socket.close()
if __name__ == '__main__':
main()