Home > Article > Backend Development > The client written in Python sends instructions to the server to execute the corresponding commands and return the results.
I have nothing to do, so I use python to write a client-server response program. The main principle is that the client communicates with the server through the tcp protocol. The client sends instructions to the server, and the server executes the instructions and returns the corresponding results to Client, the client prints the results. The code is relatively simple and will not be introduced in detail. Just for entertainment.
Server-side code, server_tcp.py
#!/usr/bin/env python # -*- coding:utf-8 -*- # #执行客户端发送过来的命令,并把执行结果返回给客户端 import socket, traceback, subprocess host = '' port = 51888 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) s.listen(1) while 1: try: client_socket, client_addr = s.accept() except Exception, e: traceback.print_exc() continue try: print 'From host:', client_socket.getpeername() while 1: command = client_socket.recv(4096) if not len(command): break print client_socket.getpeername()[0] + ':' + str(command) # 执行客户端传递过来的命令 handler = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) output = handler.stdout.readlines() if output is None: output = [] for one_line in output: client_socket.sendall(one_line) client_socket.sendall("\n") client_socket.sendall("ok") except Exception, e: traceback.print_exc() try: client_socket.close() except Exception, e: traceback.print_exc()
2. Client code client_tcp.py
#!/usr/bin/env python # -*- coding:utf-8 -*- # #给server端发送命令 import socket, sys, traceback host = '127.0.0.1' port = 51888 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect((host, port)) except Exception, e: msg = traceback.format_exc() print '连接错误:', msg input_command = raw_input('Input command:') s.send(input_command) # 利用shutdown()函数使socket双向数据传输变为单向数据传输 # 该参数表示了如何关闭socket。具体为:0表示禁止将来读;1表示禁止将来写;2表示禁止将来读和写 s.shutdown(1) print '发送完成.' print '收到内容:\n' while 1: buff = s.recv(4096) if not len(buff): break sys.stdout.write(buff)
3. Start the server_tcp.py script and start listening to the local port 51888; then start client_tcp.py.
(1) Client content:
/usr/bin/python2.7 /home/wuguowei/PycharmProjects/xplan_script/test_process/client_tcp.py Input command:ls -l 发送完成. 收到内容: 总用量 20 -rw-r--r-- 1 root root 744 2月 10 14:44 client_tcp.py -rw-r--r-- 1 root root 877 2月 10 14:18 my_sub_process.py -rw-r--r-- 1 root root 1290 2月 10 14:45 server_tcp.py -rw-r--r-- 1 root root 493 2月 10 10:43 tcpclient.py -rw-r--r-- 1 root root 1168 2月 10 11:51 tcpserver.py ok Process finished with exit code 0
(2) Server side information
/usr/bin/python2.7 /home/wuguowei/PycharmProjects/xplan_script/test_process/server_tcp.py From host: ('127.0.0.1', 46993) 127.0.0.1:ls -l