Python TCP Socket实现文件下载客户端与服务端详解
本文通过Python代码详解基于TCP协议的文件下载实现。涵盖客户端连接、文件请求与接收流程,以及服务器绑定、监听、多客户端处理机制。代码包含完整示例,解析connect、listen、accept等关键API用法,并指出当前版本仅支持小文件传输的局限性。
首先展示相关代码实现。
Python TCP文件下载客户端实现
客户端部分代码。
客户端代码解析
import socket
def main():
#creat:
download_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#link:
serv_ip=input("please input server IP")
serv_port=int(input(("please input server port")))
serv_addr=(serv_ip,serv_port)
download_client.connect(serv_addr)
#send and receive
filename=input("please input filename")
download_client.send(filename.encode("utf-8"))
download_data=download_client.recv(1024)
if download_data:
with open("receive_"+filename,"wb") as f:
f.write(download_data)
download_client.close()
if __name__ == '__main__':
main()
Python TCP文件下载服务端实现
服务器部分代码。
服务端代码解析
import socket
def send_data(server_socket):
while True:
filename = server_socket.recv(1024).decode("utf-8")
print("用户请求下载对象是%s"%filename)
if filename:
with open(filename, "rb") as f:
file_data = f.read()
server_socket.send(file_data)
else:
server_socket.close()
break
def main():
#creat
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#bind
server.bind(("",4399))
#listen
server.listen(128)
#accept
while True:
print("waiting for quest")
server_socket,client_ip=server.accept()
print("connected")
send_data(server_socket)
#close
server.close()
if __name__ == '__main__':
main()
此前曾编写过基于UDP的简单程序,今日学习TCP协议。TCP与UDP的区别与联系已有诸多论述,此处不再赘述。本文采用TCP协议,因其在文件下载场景中应用更为广泛,具备更高的可靠性。以下对客户端代码进行具体分析:
第一点,TCP协议面向连接。客户端发送请求前,必须与服务器建立连接(这与UDP不同)。因此,代码中体现了connect动作以完成连接建立。
第二点,当前程序的recv方法仅支持接收1KB数据。若尝试收发大文件,程序将会出错。关于大文件下载的解决方案,将在后续研究中补充说明。
接下来对服务器代码进行分析:
第一点,服务器必须进行绑定操作,即确定其地址。只有明确了地址,客户端才能知晓每次需与谁建立连接。
第二点,涉及socket的listen方法。在之前的网络编程中,我们通常主动连接他人(如使用connect())。服务器则不同,它处于被动连接状态,等待客户端发起连接。listen方法用于实现这种状态的转换。其后的参数指定了等待队列中最多可容纳的传入连接数。若需确定可指定的最大连接数,需参照MaxConnections值,即等待连接的最大数量。
第三点,accept()方法返回一个元组。前文代码中使用了两个变量对该元组进行拆包。元组的第一个元素是socket对象,第二个元素是连接本服务器的客户端地址。对于新生成的socket对象,可理解为服务器主socket在接到连接后,派遣了一个专用的socket来专门服务于该客户端。
第四点,一个服务器可同时被多个客户端连接。每个客户端都会分配一个专用的socket进行处理和服务。
TCP通信流程总结
总结部分:
客户端流程:创建套接字(可绑定)—连接服务器—收发数据—关闭连接。 服务器流程:创建套接字—绑定地址—监听连接—接收连接—收发数据—关闭连接。
以上为本文的全部内容,希望对各位的学习有所帮助,也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









