tcp下载器(客户端,服务端)详解
程序员文章站
2022-06-06 14:10:07
...
tcp下载器客户端流程
1,创建socket套接字对象
2.建立连接
3.发送所需文件信息名称
4.接收回传信息并且存下来
5.关闭socket
参考代码:
import socket
def main():
#创建套接字对象
tcp_clients_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#建立连接
server_addr = input("请输入服务器ip地址:")
server_port = int(input("请输入服务器端口号:"))
tcp_clients_socket.connect((server_addr,server_port))
#发送文件所需信息
file_name = input("请输入文件名:")
tcp_clients_socket.send(file_name.encode('utf-8'))
#接收回传信息并且存下来
recv_data = tcp_clients_socket.recv(1024*1024)
file_data = recv_data.decode('utf-8')
if file_data:
f = open("/home/python/Desktop/" + file_name,"w")
f.write(file_data)
f.close()
else:
print("没有数据")
tcp_clients_socket.close()
if __name__ == '__main__':
main()
tcp下载器服务端流程
1,创建socket套接字对象
2.端口复用
3.绑定端口
4.将socket主动状态变为被动,等待客户端请求连接
#创建一个新的套接字用来对接客户端
5.接收信息
6.判断能否找到文件,找到则将内容发送
找到文件,打开文件,读取信息,发送信息
7.发送找到的文件信息
8.关闭socket
import socket
def file_concent(file_name):
try:
f = open(file_name,"r")
concent = f.read()
return concent
except:
print("没有相关文件")
def main():
#创建套接字对象
tcp_clients_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#端口复用
tcp_clients_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
#3.绑定端口
tcp_clients_socket.bind(('',8888))
#4.将socket主动状态变为被动,等待客户端请求连接
tcp_clients_socket.listen(5)
while True:
#创建一个新的套接字用来对接客户端
new_socket,client_addr = tcp_clients_socket.accept()
print("有新的客户端请求来自",client_addr)
while True:
#接收信息
recv_file_name = new_socket.recv(1024)
if recv_file_name:
file_name = recv_file_name.decode('utf-8')
print("要下载的文件名称为:",file_name)
#查找文件并发送
new_concent = file_concent(file_name)
new_socket.send(new_concent.encode('utf-8'))
else:
print("客户端已下线")
break
new_socket.close()
tcp_clients_socket.close()
if __name__ == '__main__':
main()