zoukankan      html  css  js  c++  java
  • TCP案例——客户端循环向服务器下载文件

    效果:

    客户端                                                                                                服务器

    客户端代码:

     1 import socket
     2 
     3 
     4 def main():
     5     while True:
     6         # 1.创建套接字
     7         client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     8 
     9         # 2.连接服务器
    10         # dest_ip = input("请输入服务器的IP:")
    11         # dest_port = int(input("请输入服务器的端口:"))
    12 
    13         client_socket.connect(('192.168.2.100', 7788))
    14 
    15         # 3.向服务器发送要下载的文件
    16 
    17         file_name = input("请输入您要下载的文件名:")
    18         client_socket.send(file_name.encode('utf-8'))
    19 
    20         # 4.接收文件——recv内单位是字节
    21         recv_data = client_socket.recv(1024)
    22         # print(recv_data)
    23 
    24         # 5.写入文件
    25         # 如果文件有内容才写入文件
    26         if recv_data:
    27             with open('[接收]' + file_name, 'wb') as f:
    28                 f.write(recv_data)
    29             print("文件下载完成")
    30         else:
    31             print("要下载的文件不存在或为空。")
    32         # 6.关闭套接字
    33         client_socket.close()
    34 
    35 
    36 if __name__ == '__main__':
    37     main()

    服务器代码:

     1 import socket
     2 
     3 
     4 def main():
     5     while True:
     6         # 1.创建监听套接字
     7         tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     8 
     9         # 2.绑定IP和Port
    10         tcp_server_socket.bind(('', 7788))
    11 
    12         # 3.设置为被动监听
    13         tcp_server_socket.listen(128)
    14 
    15         try:
    16             while True:
    17                 # 4.等待客户端连接
    18                 print('等待客户端连接中......')
    19                 client_socket, client_adress = tcp_server_socket.accept()
    20                 print('已连接客户端 %s' % str(client_adress))
    21 
    22                 # 5.获取客户端需要的文件并回传给客户端
    23                 file_name = client_socket.recv(1024)
    24                 print("%s 客户端需要下载的文件为:%s" % (str(client_adress), file_name.decode('utf-8')))
    25 
    26                 # 如果有,将文件回传给客户端。没有则打印文件不存在
    27                 file_content = None
    28                 try:
    29                     f = open(file_name, 'rb')
    30                     file_content = f.read()
    31                     print("已发送文件给客户端")
    32                 except Exception as ent:
    33                     print("文件不存在!")
    34                 if file_content:
    35                     client_socket.send(file_content)
    36 
    37                 # 6.关闭套接字
    38                 client_socket.close()
    39         except:
    40             print("客户端异常断开")
    41         tcp_server_socket.close()
    42 
    43 
    44 if __name__ == '__main__':
    45     main()
  • 相关阅读:
    C#中的取整函数
    java代码(8) ---guava字符串工具
    java代码(7) ---guava之Bimap
    java代码(6) ---guava之multimap
    java代码(5) ---guava之Multiset
    java代码(4)---guava之Immutable(不可变)集合
    java代码(2)---Java8 Stream
    java代码(3)----guava复写Object常用方法
    java代码(1)---Java8 Lambda
    看完这篇HTTP,跟面试官扯皮就没问题了(转)
  • 原文地址:https://www.cnblogs.com/zzmx0/p/12658745.html
Copyright © 2011-2022 走看看