课程太简单,作业太困难,所以我来写微博回复一下战斗力,这才是事情的真相,明天还要跟领导吃饭,不会显我吃太多把我开除掉吧
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,写作业!我有师兄我不怕!