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)
原文地址:https://www.cnblogs.com/liruixin/p/6109358.html