• day8-------socket网络编程


    简单的socket  一个server同时只能处理一个链接   代码如下:

     1 server端代码
     2 #author = ruixin li
     3 
     4 import socket
     5 server = socket.socket()
     6 server.bind(("0.0.0.0",5000))
     7 server.listen(5)
     8 print("开始监听")
     9 while True:
    10     conn,addr = server.accept()
    11     print("一个新连接")
    12     print(conn,addr)
    13     while True:
    14         try:
    15             data = conn.recv(1024)
    16             print("收到的信息:",data)
    17             conn.send(data.upper())
    18         except ConnectionResetError as e:
    19             print("客户端主动断开连接")
    20             break
    21 server.close()
     1 客户端程序
     2 
     3 import socket
     4 
     5 
     6 cli = socket.socket()
     7 cli.connect(("localhost",5000))
     8 while True:
     9     inp = input("请输入指令:".strip())
    10     if len(inp) == 0:
    11         continue
    12     else:
    13         cli.send(inp.encode())
    14         data = cli.recv(1024)
    15         print(data)

     python socket 实现简单的 ssh  命令

     1 #author  ruixin li
     2 
     3 import socket
     4 import subprocess
     5 ips = input("请输入绑定的IP:")
     6 ports = int(input("请输入绑定的端口:"))
     7 server = socket.socket()
     8 server.bind((ips,ports))
     9 server.listen(5)
    10 print("开始监听")
    11 while True:
    12     print("跳到外部循环")
    13     conn,addr = server.accept()
    14     print("一个新连接")
    15     print(conn,addr)
    16     while True:
    17         try:
    18             date = conn.recv(1024)
    19             if len(date) == 0:
    20                 print("收到0信息,服务器主动断开连接")
    21                 break
    22             else:
    23                 print("收到的信息:",date)
    24                 msg = subprocess.Popen(date,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
    25                 data = msg.stdout.read()
    26                 print(data)
    27                 dataerr = msg.stderr.read()
    28                 print("err:",dataerr)
    29                 if len(data) == 0:
    30                     conn.send(dataerr)
    31                 else:
    32                     conn.send(data)
    33         except ConnectionResetError as e:
    34             print("客户端主动断开连接")
    35             break
    36 server.close()

    客户端
     1 import socket
     2 ips = input("请输入要连接的IP:")
     3 ports = int(input("请输入要连接的端口:"))
     4 
     5 cli = socket.socket()
     6 cli.connect((ips,ports))
     7 while True:
     8     inp = input("请输入指令:".strip())
     9     if len(inp) == 0:
    10         continue
    11     else:
    12         cli.send(inp.encode())
    13         data = cli.recv(1024)
    14         print(data)

     socket 实现简单的FTP上传下载功能

      1 #客户端代码
      2 #author : ruixin li
      3 
      4 
      5 import socket
      6 import hashlib
      7 import os
      8 #ips = input("请输入要连接的IP:")
      9 #ports = int(input("请输入要连接的端口:"))
     10 
     11 
     12 print("说明:下载服务器文件到当前路径")
     13 cli = socket.socket()
     14 cli.connect(("localhost",5000))
     15 while True:
     16     inp = input("请输入指令: 按Q退出: ".strip())
     17     if len(inp) == 0:
     18         continue
     19     elif inp == "q":
     20         exit()
     21     elif inp.split()[0] == "get":
     22         inp_file_name = inp.split()[1]
     23         cli.send(inp.encode())
     24         tmp = cli.recv(1024).decode()
     25         print("文件大小",tmp)
     26         print(type(tmp))
     27         remote_file_size = int(tmp)
     28         print("服务端返回文件总大小:",remote_file_size)
     29         local_size = 0
     30         cli.send("收到大小,请发文件内容".encode())
     31         file_name = inp.split()[1]
     32         f = open(file_name.split("/")[-1] + ".new","wb")
     33         while local_size < remote_file_size:
     34             #f = open(file_name + ".new","wb")
     35             data = cli.recv(1024)
     36             f.write(data)
     37             local_size += len(data)
     38            # f.close()
     39             print("文件总大小:",remote_file_size,"接收到:",local_size)
     40         else:
     41             print("文件下载完成,文件总大小:",remote_file_size,"接收到:",local_size)
     42             f.close()
     43             cli.send("请发送MD5".encode())
     44             remote_md5 = cli.recv(1024).decode()
     45             print("接收到服务端的MD5:",remote_md5)
     46             f = open(file_name.split("/")[-1] + ".new", "rb")
     47             m2 = hashlib.md5()
     48             for i in f:
     49                 m2.update(i)
     50             print("本地文件MD5",m2.hexdigest())
     51             f.close()
     52             if m2.hexdigest() == remote_md5 :
     53                 print("文件校验成功")
     54             else:
     55                 print("文件下载不完整")
     56     elif inp.split()[0] == "put":
     57         inp_file_name = inp.split()[1]
     58         cli.send(inp.encode())
     59 
     60         if os.path.isfile(inp_file_name):
     61 
     62             put_file_size = str(os.stat(inp_file_name).st_size).encode()
     63             cli.send(put_file_size)
     64             tmp = cli.recv(1024)
     65             print("等待确认",tmp.decode())
     66             f = open(inp_file_name,"rb")
     67             for line in f:
     68                 cli.send(line)
     69             f.close()
     70             print("文件发送完毕")
     71 
     72 
     73 
     74 
     75 cli.close()
     76 
     77 
     78 
     79 
     80 
     81 
     82 
     83 
     84 #服务端代码
     85 
     86 
     87 import socket
     88 import subprocess
     89 import os
     90 import hashlib
     91 #ips = input("请输入绑定的IP:")
     92 #ports = int(input("请输入绑定的端口:"))
     93 server = socket.socket()
     94 server.bind(("localhost",5000))
     95 server.listen(5)
     96 print("开始监听")
     97 while True:
     98     print("跳到外部循环")
     99     conn,addr = server.accept()
    100     print("一个新连接")
    101     print(conn,addr)
    102     while True:
    103             date = conn.recv(1024)
    104             if len(date) == 0:
    105                 print("收到0信息,服务器主动断开连接")
    106                 break
    107             else:
    108                 print("收到的信息:",date)
    109                 args1,file_name = date.split()
    110                 print("第一个参数",args1.decode(),"第二个参数",file_name.decode())
    111                 if args1.decode() == "get":
    112                     print("走下载")
    113                     if os.path.isfile(file_name.decode()):
    114                         file_total_size = str(os.stat(file_name.decode()).st_size).encode()
    115                         print(file_total_size)
    116                         print(type(file_total_size))
    117                         conn.send(file_total_size)
    118                         conn.recv(1024)
    119                         print("等待客户端ack应答")
    120                         f = open(file_name.decode(),"rb")
    121                         m = hashlib.md5()
    122                         for line in f:
    123                             conn.send(line)
    124                             m.update(line)
    125                         hash_md5 = (m.hexdigest())
    126                         print("文件MD5:",hash_md5)
    127                         f.close()
    128                         print("文件发送完毕")
    129                         tmp = conn.recv(1024)
    130                         print(tmp.decode())
    131                         conn.send(hash_md5.encode())
    132                     else:
    133                         print("文件不存在")
    134                         continue
    135                 elif args1.decode() == "put":
    136                     print("开始上传文件")
    137                     # if  os.path.isfile(file_name.decode().split("/")[-1]):
    138                     #     print("文件已存在")
    139                     #     conn.send("文件已存在".encode())
    140 
    141                     remote_file_size = int(conn.recv(1024).decode())
    142                     print("收到客户端文件大小:",remote_file_size)
    143                     put_file_size = 0
    144                     conn.send("可以发送数据了".encode())
    145                     f = open(file_name.decode().split("/")[-1],"wb")
    146                     while put_file_size < remote_file_size:
    147                         recv_data = conn.recv(1024)
    148                         f.write(recv_data)
    149                         put_file_size += len(recv_data)
    150                     f.close()
    151                     print("文件总大小:",remote_file_size,"接收到的大小",put_file_size)
  • 相关阅读:
    解决eclipsehelios中Errors running builder JavaScript Validator的问题
    oracle sequence cache
    离开页面前调用Js方法
    精典的148句话
    DB2 应用
    现有portal项目(商业的和开源的)解决方案及优缺点
    管理铁律
    myeclipse 6.0 弹出 Multiple Errors have Occurred 错误
    绝对经典的表记录操作(超越版)
    DB2中不同于其它数据库的操作
  • 原文地址:https://www.cnblogs.com/liruixin/p/6109358.html
Copyright © 2020-2023  润新知