Finance-IT-gao

客户端代码:

 1 import socket
 2 sk = socket.socket()
 3 address = (\'127.0.0.1\',8006)
 4 sk.connect(address)
 5 print(\'已连接\')
 6 
 7 while True:
 8     inp = input(\'>>>\')
 9     if inp == \'exit\':
10         break
11     elif inp == \'\':
12         print(\'不能输入空白字符\')
13         continue
14     sk.send(bytes(inp,\'utf8\'))
15     result_len = int(str(sk.recv(1024),\'utf8\'))   #接收结果的长度
16     print(result_len)
17     data = bytes()
18     while len(data) != result_len:
19         receive = sk.recv(1024)
20         data += receive
21     print(str(data,\'gbk\'))

1.当结果较大时,一次接收不完,需要循环接收
2.通过比较已接收内容的大小与完整结果的大小判断是否接收完毕
3.19行:我们收到的内容是Windows帮我们将读到的内容编码为bytes类型,而Windows默认是gbk
所以在21行,解码时要用gbk

服务端代码:

 1 import subprocess     #该模块用来执行cmd命令
 2 import socket
 3 sk = socket.socket()
 4 address = (\'127.0.0.1\',8006)
 5 sk.bind(address)
 6 sk.listen(3)
 7 
 8 while True:
 9     print(\'waiting for connection..........\')
10     conn,addr = sk.accept()
11     while True:
12         try:
13             data = str(conn.recv(1024),\'utf8\')
14             if  data != \'\':
15                 print(data)
16             else:
17                 continue
18         except Exception as e:
19             print(e)
20             break
21         obj = subprocess.Popen(data,shell=True,stdout=subprocess.PIPE)
22         cmd_result = obj.stdout.read()    #读取cmd命令的结果,该结果就是bytes类型
23         result_len = str(len(cmd_result))  #计算结果的大小
24         conn.send(bytes(result_len,\'utf8\'))  #先发送一个结果的大小
25         conn.sendall(cmd_result)   #发送命令执行的内容
26 sk.close()
bytes类型与整型不能互转,必须用bytes与str的互转做过渡

 

分类:

技术点:

相关文章:

  • 2021-09-05
  • 2021-06-29
  • 2021-10-02
  • 2021-11-12
  • 2021-11-12
  • 2021-11-12
  • 2021-12-23
  • 2021-12-23
猜你喜欢
  • 2022-12-23
  • 2022-01-12
  • 2021-07-15
  • 2021-05-29
  • 2021-08-16
  • 2022-12-23
  • 2021-11-22
相关资源
相似解决方案