socket tcp/ip 之简单ssh协议
Posted pyming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket tcp/ip 之简单ssh协议相关的知识,希望对你有一定的参考价值。
看了python核心编程和大牛的视频之后,自己动手也试了一试,写写笔记,加深一下印象
首先服务端要导入socket模块,然后绑定地址和端口,并监听,然后进入等待接收来自客户端请求的一个循环,如果有数据来连接,则接收数据,整理后把请求的数据发给客户端。
客户端则也是导入socket模块,连接地址和端口,然后是一个发送请求的循环,然后接收来自服务器的信息。
所有的数据的发送与接收都是采用字节类型,而不是字符串,所以要用encode编码。
实现计算机内部命令的接收与发送,如果输入的命令有误,则给出提示。
服务器端:
import socket, os #导入模块 tcp_ser = socket.socket() tcp_ser.bind((\'localhost\', 6666))#绑定端口和IP tcp_ser.listen(5)#监听数目 while True:#大循环,客户端挂掉服务端一直监听状态 conn, addr = tcp_ser.accept()#等待连接 print(\'waitting connect...\', addr) while True:#小循环,一个客户端的多个请求 data = conn.recv(1024)#允许一次接收的数据为1K #if not data:#在客户端已经判断,可以不要 # conn.send(b\'please input command!\') # continue cmd_data = os.popen(data.decode(\'utf-8\')).read()#调取读取计算机内部命令 if not cmd_data:#做个判断,如果读取为空,即没有返回信息,则输入命令有误,则发送特定信息,并重新请求 conn.send(b\'No command!\') continue conn.send(cmd_data.encode(\'utf-8\'))#如果命令正确则发送返回的数据 #conn.close() tcp_ser.close()
客户端:
import socket tcp_client = socket.socket() tcp_client.connect((\'localhost\', 6666))#客户端应该与服务器端一致 while True:#客户端的循环 data = input(\'>>\')#判断输入是否为空,若为空则不允许发送 if len(data) == 0: print(\'No input message...\') continue tcp_client.send(data.encode(\'utf-8\'))#发送请求数据 cmd_msg = tcp_client.recv(102400)#接收返回数据,一次性接收102k print(cmd_msg.decode(\'utf-8\'))#接收和发送都是以字节的形式,所以要编码encode,打印需要解码decode tcp_client.close()
成功实现:
以上是关于socket tcp/ip 之简单ssh协议的主要内容,如果未能解决你的问题,请参考以下文章