设为首页 收藏本站
查看: 1236|回复: 0

[经验分享] Python31 Socket2

[复制链接]

尚未签到

发表于 2018-8-6 09:56:13 | 显示全部楼层 |阅读模式
server端:  import socket,os
  server = socket.socket()
  server.bind(('localhost',9999))
  server.listen()
  while True:
  conn,addr = server.accept()
  print ('new conn:',addr)
  while True:
  print ("等待新指令")
  data = conn.recv(1024)
  if not data:
  print ('客户端已断开!')
  break
  print ('执行指令:',data)
  cmd_res = os.popen(data.decode()).read()
  print("before send", len(cmd_res))
  if len(cmd_res) == 0:
  cmd_res = 'cmd has no output......'
  conn.send(str(len(cmd_res)).encode('utf-8'))
  #发送数据长度给client,这样client就可以判断(根据1024)需要接收多少次数据。
  #但是这里要注意的是,整数是不可以被encode,只有字符串才可以被encode,所以这里要使用str将其改为字符串格式
  conn.send(cmd_res.encode('gbk'))  #发送实际数据给client,注意实际数据是从Windows获取的,所以数据格式是gbk
  print ("send done")
  server.close()
  client端:
  import socket
  client = socket.socket()
  client.connect(('localhost',9999))
  while True:
  cmd = input(">>:").strip()
  if len(cmd) == 0:continue
  client.send(cmd.encode('utf-8'))
  cmd_res_size = client.recv(1024)    #接收命令结果的长度
  # cmd_res = client.recv(1024)
  print ('接收结果大小:',cmd_res_size.decode())    #打印接收数据的总大小
  received_size = 0
  while received_size != int(cmd_res_size.decode()):
  #接收来的数据大小不等于数据的总大小,说明数据还没接收完,就会一直循环接收数据;
  #由于cmd_res_size发送过来的是bytes类型,所以需要先decode,在int将字符串改为整数。
  data = client.recv(1024)
  received_size += len(data) #每次接收数据可能小于1024,所以需要len判断
  print (data.decode('gbk'))  #发送过来的Windows数据是gbk
  else:
  print ("cmd res receive done....",received_size)
  client.close()
  client执行结果:
  >>:ipconfig
  接收结果大小: 1185
  Windows IP 配置
  无线局域网适配器 WLAN:
  媒体状态  . . . . . . . . . . . . : 媒体已断开连接
  连接特定的 DNS 后缀 . . . . . . . :
  无线局域网适配器 本地连接* 1:
  媒体状态  . . . . . . . . . . . . : 媒体已断开连接
  连接特定的 DNS 后缀 . . . . . . . :
  以太网适配器 以太网:
  连接特定的 DNS 后缀 . . . . . . . :
  本地链接 IPv6 地址. . . . . . . . : fe80::141a:83:bbf0:3c7%2
  IPv4 地址 . . . . . . . . . . . . : 10.213.36.2
  子网掩码  . . . . . . . . . . . . : 255.255.255.0
  默认网关. . . . . . . . . . . . . : 10.213.36.250
  以太网适配器 VMware Network Adapter VMnet1:
  连接特定的 DNS 后缀 . . . . . . . :
  本地链接 IPv6 地址. . . . . . . . : fe80::e08f:e633:7d98:5a39%20
  IPv4 地址 . . . . . . . . . . . . : 192.168.52.1
  子网掩码  . . . . . . . . . . . . : 255.255.255.0
  默认网关. . . . . . . . . . . . . :
  以太网适配器 VMware Network Adapter VMnet8:
  连接特定的 DNS 后缀 . . . . . . . :
  本地链接 IPv6 地址. . . . . . . . : fe80::318f:38e3:25d9:c249%11
  IPv4 地址 . . . . . .
  . . . . . . : 192.168.142.1
  子网掩码  . . . . . . . . . . . . : 255.255.255.0
  默认网关. . . . . . . . . . . . . :
  以太网适配器 蓝牙网络连接:
  媒体状态  . . . . . . . . . . . . : 媒体已断开连接
  连接特定的 DNS 后缀 . . . . . . . :
  隧道适配器 本地连接* 12:
  媒体状态  . . . . . . . . . . . . : 媒体已断开连接
  连接特定的 DNS 后缀 . . . . . . . :
  server执行结果:
  new conn: ('127.0.0.1', 60035)
  等待新指令
  执行指令: b'ipconfig'
  before send 1185
  send done
  等待新指令

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-547420-1-1.html 上篇帖子: Python面向对象编程之我见 下篇帖子: Python35 events(事件)、队列
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表