标签:
上节地址:Python网络编程:socket
先补充点内容:
#!/usr/bin/env python # _*_ coding:utf_8 _*_ import socket ip_port=(‘127.0.0.1‘,9002) s = socket.socket() s.connect(ip_port) while True: send_data = input(‘>>: ‘).strip() if len(send_data) == 0:continue if send_data == ‘exit‘:break s.send(bytes(send_data,encoding=‘utf-8‘)) #解决粘包问题 ready_tag = s.recv(1024) #收取待发送字节的长度 ready_tag=str(ready_tag,encoding=‘utf8‘) if ready_tag.startswith(‘Ready‘): #数据包格式为Ready|9124 msg_size=int(ready_tag.split(‘|‘)[-1]) start_tag = ‘Start‘ s.sendall(bytes(start_tag,encoding=‘utf8‘)) #发送消息,表示开始传输 recv_size = 0 #print(msg_size) recv_msg = b‘‘ while recv_size < msg_size: recv_data = s.recv(1024) recv_msg+=recv_data recv_size+=len(recv_data) print(str(recv_msg,encoding=‘utf8‘)) #收消息 # recv_data=s.recv(1024) # print(str(recv_data,encoding=‘utf-8‘)) s.close()
#!/use/bin/env python #_*_ coding:utf_8 _*_ import socket import subprocess ip_addr=(‘127.0.0.1‘,9002) s=socket.socket() #创建对象 s.bind(ip_addr) #绑定连接地址 s.listen(5) #设置监听主机数 while True: conn,addr=s.accept() i = 0 while True: print(i) try: recv_data = conn.recv(1024) print(‘------0‘) #print(str(recv_data,encoding=‘utf-8‘)) if len(recv_data) == 0:break #执行系统命令 p=subprocess.Popen(str(recv_data,encoding=‘utf-8‘),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)#执行系统命令,windows平台命令的标准输出是gbk编码,需要转换 res = p.stdout.read() #获取标准输出 if len(res) == 0: #执行错误命令,send_data为空 send_data = str(p.stderr.read(),encoding=‘utf-8‘) else: send_data=str(res,encoding=‘gbk‘) send_data=bytes(send_data,encoding=‘utf-8‘) #要发送的数据 #判断粘包 ready_tag=‘Ready|%s‘ %len(send_data) conn.send(bytes(ready_tag,encoding=‘utf8‘)) #发送数据长度 feedback=conn.recv(1024) #接收确认信息 feedback=str(feedback,encoding=‘utf8‘) if feedback.startswith(‘Start‘): print(send_data) conn.sendall(send_data) #发送命令的执行结果 #conn.sendall(send_data) print(‘succeed‘) i+=1 except Exception: break conn.close()
python 网络编程:socket和select实现伪并发
标签:
原文地址:http://www.cnblogs.com/ernest-zhang/p/5660590.html