day31
今日内容: 1、socket的通信流程介绍 2、基于tcp协议通信的套接字程序 # 服务端: import socket # 基于TCP协议实现简单套接字通信 # phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # # phone.bind(('127.0.0.1', 8080)) # # phone.listen(5) # print('starting %s:%s' % ("127.0.0.1", 8080)) # # conn, client_addr = phone.accept() # # data = conn.recv(1024) # 最大接收的字节个数 # print('收到的客户端数据:', data.decode('utf-8')) # conn.send(data.upper()) # # conn.close() # phone.close() # 加上循环 # 服务器应该满足的特性:1、一直对外提供服务 2、并发的提供服务 # phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # phone.bind(('127.0.0.1', 8080)) # phone.listen(5) # print('starting %s:%s' % ('127.0.0.1', 8080)) # # 链接循环 # while True: # conn, client_addr = phone.accept() # print(client_addr) # # 通信循环 # while True: # try: # data = conn.recv(1024) # print('收到的客户端数据:', data.decode('utf-8')) # conn.send(data.upper()) # except Exception: # break # # conn.close() # # phone.close() # 远程执行命令 import subprocess phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) phone.bind(('192.168.11.245', 8080)) phone.listen(5) print('starting %s:%s' % ('127.0.0.1', 8080)) while True: conn, client_addr = phone.accept() try: cmd = conn.recv(1024) obj = subprocess.Popen(cmd.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) res = obj.stdout.read() + obj.stderr.read() print(res) conn.send(res) except Exception: break conn.close() phone.close() # 客户端 import socket # 基于TCP协议实现简单套接字通信 # phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # # phone.connect(('127.0.0.1', 8080)) # # phone.send('hello'.encode('utf_8')) # # data = phone.recv(1024) # # print('服务端返回的数据:', data.decode('utf-8')) # # phone.close() # 加上循环 # phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # phone.connect(('127.0.0.1', 8080)) # # while True: # msg = input('>>>:').strip() # phone.send(msg.encode('utf-8')) # data = phone.recv(1024) # print('服务端返回的数据:', data.decode('utf-8')) # # phone.close() # 远程执行命令 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) phone.connect(('192.168.11.245', 8080)) while True: cmd = input('>>>>>:').strip() phone.send(cmd.encode('utf-8')) data = phone.recv(1024) print(data.decode('gbk')) phone.close()