Socket通讯模块

动态导入模块

1 import importlib 
2   
3 __import__('import_lib.metaclass') #这是解释器本身内部用的 
4 #importlib.import_module('import_lib.metaclass') #与上面这句效果同样,官方建议用这个 


断言:

assert type(obj.name) is int服务器

print(obj.name/2)并发

也就是判断是否符合标准,不符合的话,程序就会中止运行,例如:在银行的转帐系统中,遇到问题,就会马上中止!ssh

 

Socket:

服务端:socket

 1 import socket
 2 Server= socket.socket(AF_INET,SOCK_STREAM)
 3 Server.bind('localhost',9999)
 4 Server.listen(10)
 5 
 6 while True:#重复链接
 7     conn,addr = Server.accept() #阻塞
 8     while True:#屡次发送信息
 9          print("new conn",addr)
10          data = conn.recv(1024) #最大8192  recv默认是阻塞的,客户端不发,就一直处于此处
11          if not data:
12              break   #客户端断开,conn.recv收到的都是空数据
13          print(data)
14          conn.send(data.upper())

客户端:ide

1 import socket
2 client = socket.socket()
3 client.connect(serverip,9999) #链接服务器
4 client.send(data)#发送数据
5 client.recv(data)#接受数据

5.经过socket实现简单的ssh

 

 1 import socket,os
 2 
 3 server = socket.socket()
 4 server.bind(('localhost',999))
 5 
 6 server.listen(10)
 7 
 8 while True:
 9     conn,addr  = server.accept()
10     print("new conn:",addr)
11     while True:
12         data = conn.recv(1024)
13         if not data:
14             print("客户端已经断开")
15             break
16         print("执行指令:",data)
17         cmd_res = os.popen(data.decode()).read()
18         conn.send( str(len(cmd_res.encode())).encode("utf-8") )#先发大小给客户端
19         conn.send(cmd_res.encode("utf-8"))
View Code

 

 1 import socket
 2 
 3 client  = socket.socket()
 4 
 5 client.connect(('localhost',999))
 6 while True:
 7     cmd = input(">>:").strip()
 8     if len(cmd) ==0:continue
 9     client.send(cmd.encode("utf-8"))
10     cmd_res_size = client.recv(1024) #接受命令结果的长度
11     print("命令的长度:",cmd_res_size)
12     received_size = 0
13     #receiced_data = b''
14     while received_size<int(cmd_res_size.decode()):
15 
16         data = client.recv(1024)
17         received_size+=len(data)#每次收到的可能小于1024
18         #print(data.decode())
19         print(received_size)
20     else:
21         print("data done")
View Code

光只是简单的发消息、收消息没意思,干点正事,能够作一个极简版的ssh,就是客户端链接上服务器后,让服务器执行命令,并返回结果给客户端。spa

 6.经过socket发送文件

ftp server:code

读取文件名>>检测文件是否存在>>打开文件>>检测文件大小>>发送文件大小和md5给客户端>>等客户端确认>>开始边读边发送数据>>发送md5,视频

视频8.7  8.8回头从新看      server

7.SocketServer

实现并发处理blog

步骤:1.必须建立一个请求处理类,而且这个类要继承BaseRequestHandler,而且还有重写父类中的hangle方法

        2.必需要实例化一个TCPsever,而且传递server IP和上面常见的请求处理类,给这个实例化的TCPserver

        3.server.serve_forever()  #处理多个请求,永远执行

        4.call server_close() to close the socket

相关文章
相关标签/搜索