首页 > 技术文章 > python第九天

bfmq 2016-09-12 15:40 原文

课程太简单,作业太困难,所以我来写微博回复一下战斗力,这才是事情的真相,明天还要跟领导吃饭,不会显我吃太多把我开除掉吧

soket编程,so easy,可是作业不会做

recv()跟accept()是阻塞的,数据交互过程如果某一端突然断开了连接,另外一端就会开始报复社会,所以要对数据进行验证

粘包问题的结局就是在发送数据前先发送数据的信息即可,然后循环收取一直到收齐数据即可

按照国际惯例该来代码了,可是这次的课程完全就是在用同一篇代码.....更重要的是作业也是....最重要的是作业我还没写出来,只能先放几个凑数的了

 1 #!/usr/bin/env python
 2 import socketserver
 3 import subprocess
 4 
 5 class MyServer(socketserver.BaseRequestHandler):
 6     def handle(self):
 7         self.request.sendall(bytes('欢迎致电10086', encoding='utf-8'))
 8         while True:
 9             rec_mes = self.request.recv(1024)
10             print('%s:%s' % (self.client_address, rec_mes.decode()))
11             cmd = subprocess.Popen(rec_mes.decode(), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
12             cmd_ret = cmd.stdout.read()
13             if not cmd_ret:
14                 cmd_ret = cmd.stderr.read()
15             if len(cmd_ret) == 0:
16                 cmd_ret = bytes('cmd not output', encoding='utf-8')
17             self.request.sendall(cmd_ret)
18 
19 if __name__ == '__main__':
20     server = socketserver.ThreadingTCPServer(('127.0.0.1', 9999), MyServer)
21     server.serve_forever()
 1 #!/usr/bin/env python
 2 import socket
 3 ip_port = ('127.0.0.1', 9999)
 4 s = socket.socket()
 5 s.connect(ip_port)
 6 welcome_mes = s.recv(1024)
 7 print(welcome_mes.decode())
 8 while True:
 9     send_mes = input('>>:').strip()
10     if len(send_mes) == 0:
11         continue
12     s.send(bytes(send_mes, encoding='utf-8'))
13     recv_mes = s.recv(1024)
14     print(str(recv_mes, encoding='utf-8'))
15 s.close()

这连粘包问题都没解决呢,而且还跟操作系统有关系,在win上直接会gg,写作业!我有师兄我不怕!

 

推荐阅读