python网络编程--socket简单实现-创新互联
python网络编程
你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事成都网站设计、成都网站制作、企业网站建设、手机网站制作、网页设计、品牌网站建设、网页制作、做网站、建网站。创新互联拥有实力坚强的技术研发团队及素养的视觉设计专才。一、客户端控制服务端执行命令
server:
#!/usr/local/python3/bin/python3.6 #-*- coding:utf-8 -*- #AUTH:FJC from socket import * from time import ctime import subprocess HOST = '' #HOST变量空白,表示可以使用任何地址 PORT = 21567 BUFSIZ = 1024 #缓冲区大小为1KB ADDR = (HOST,PORT) tcp_ser_sock = socket(AF_INET,SOCK_STREAM) #创建套接字对象,AF_INET表示面向网络的,SOCK_STREAM表示用于TCP传输的套接字类型 tcp_ser_sock.bind(ADDR) #将地址(主机名、端口号对)绑定到套接字上 tcp_ser_sock.listen(5) #设置并启动TCP 监听器,listen的参数表示连接被转接或拒绝之前,传入连接请求的大数 while True: print('waiting for connecting...') tcp_cli_sock,addr = tcp_ser_sock.accept() #返回一个socket对象和属于客户端的套接字 print('...connect from:',addr) while True: try: data = str(tcp_cli_sock.recv(BUFSIZ),'utf8') except Exception: break if not data: continue obj = subprocess.Popen(data,shell=True,stdout=subprocess.PIPE) result = obj.stdout.read() tcp_cli_sock.send(bytes(str(len(result)),'utf8')) tcp_cli_sock.recv(BUFSIZ) #解决粘包现象 tcp_cli_sock.send(result) tcp_cli_sock.close() tcp_ser_sock.close()
client:
#-*- coding:utf-8 -*- #AUTH:FJC from socket import * from sys import exit HOST = '127.0.0.1' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST,PORT) tcp_cli_sock = socket(AF_INET,SOCK_STREAM) tcp_cli_sock.connect(ADDR) while True: data = input('command>') if not data: continue elif data == ("exit" or "quit"): exit(1) tcp_cli_sock.send(bytes(data,'utf8')) result_len=str(tcp_cli_sock.recv(BUFSIZ),'utf8') tcp_cli_sock.send(bytes(1)) result = bytes() while len(result) != int(result_len): data_rec = tcp_cli_sock.recv(BUFSIZ) result += data_rec print(str(result,'gbk')) # tcp_cli_sock.close()
二、文件上传下载
server:
#-*- coding:utf-8 -*- #AUTH:FJC from socket import * import os HOST = '' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST,PORT) tcp_ser_sock = socket(AF_INET,SOCK_STREAM) tcp_ser_sock.bind(ADDR) tcp_ser_sock.listen(5) BASE_DIR=os.path.dirname(os.path.abspath(__file__)) def upload(): file_size = str(tcp_cli_sock.recv(BUFSIZ), 'utf8') file_size = int(file_size) file_recv = 0 with open(path, 'ab') as f: while file_recv != file_size: data = tcp_cli_sock.recv(BUFSIZ) f.write(data) file_recv += len(data) def download(): file_size = os.stat(path).st_size tcp_cli_sock.send(bytes(str(file_size), 'utf8')) file_send = 0 with open(path, 'rb') as f: while file_send != file_size: data = f.read(1024) tcp_cli_sock.send(data) file_send += len(data) if __name__ == '__main__': while True: print('waiting for connecting...') tcp_cli_sock, addr = tcp_ser_sock.accept() print('...connect from:', addr) try: up_down_info = str(tcp_cli_sock.recv(BUFSIZ), 'utf8') cmd, path = up_down_info.split('|') filename = os.path.basename(path) path = os.path.join(BASE_DIR, 'server_dir', filename) if cmd == 'get': download() elif cmd == 'post': upload() except Exception: continue tcp_cli_sock.close()
client:
#-*- coding:utf-8 -*- #AUTH:FJC from socket import * from sys import exit import os HOST = '127.0.0.1' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST,PORT) BASE_DIR=os.path.dirname(os.path.abspath(__file__)) def get(): file_size = str(tcp_cli_sock.recv(BUFSIZ), 'utf8') print(type(file_size)) file_size = int(file_size) file_recv = 0 with open(path, 'ab') as f: while file_recv != file_size: data = tcp_cli_sock.recv(BUFSIZ) f.write(data) file_recv += len(data) print("文件下载成功!") def post(): file_size = os.stat(path).st_size tcp_cli_sock.send(bytes(str(file_size), 'utf8')) file_send = 0 with open(path, 'rb') as f: while file_send != file_size: data = f.read(1024) tcp_cli_sock.send(data) file_send += len(data) print("文件上传成功!") if __name__ == '__main__': while True: tcp_cli_sock = socket(AF_INET, SOCK_STREAM) tcp_cli_sock.connect(ADDR) command = input('(command|file)>') if not command: continue elif command == "exit" or command == "quit": exit(1) cmd,path = command.split('|') up_down_info = '%s|%s' % (cmd, path) filename = os.path.basename(path) tcp_cli_sock.send(bytes(up_down_info, 'utf8')) path = os.path.join(BASE_DIR, filename) if cmd == 'get': get() if cmd == 'post': post() tcp_cli_sock.close()
网络编程基础知识
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前文章:python网络编程--socket简单实现-创新互联
链接分享:http://pwwzsj.com/article/djpcij.html