python之网络编程
2021-07-08 02:04
标签:介绍 str 字节 服务端 执行 col 超过 output import 一、什么是网络编程 网络编程简单来说就是对信息的发送到接收,中间传输为物理线路的作用。 在我们没有学过网络编程之前,在应用上写的代码都是只能自己提供自己使用,不能与其他人交互。那么如何实现相互通信呢? 二、数据之间的相互通信 三、网络编程的简单应用 模拟ssh 在没有介绍代码之前需要引入subprocess模块,subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回(状态)码 我们需要学会一下代码就足够了 建立服务端 建立客户端 四、黏包现象 黏包现象就是同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就称之为黏包。 只有tcp协议会出现黏包现象,dcp协议不会出现。 解决黏包的理想方案: python之网络编程 标签:介绍 str 字节 服务端 执行 col 超过 output import 原文地址:https://www.cnblogs.com/qq631243523/p/9578903.html 1 服务端
2 import socket #导入socket套接字模块
3 server = socket.socket() #创建一个socket对象
4 server.bind(("192.168.13.132",8000)) #绑定IP与端口
5 server.listen(3) #规定只允许不超过三人链接服务端
6 conn,addr = server.accept() #创建媒介与客户端地址
7 data = conn.recv(1024) #新建一个变量,通过媒介接收客户端传输过来的字节并限制不超过1024
8 print(data) #打印客户端传来的讯息
9 conn.send(b"123456") #返回给客户端的字节
10 conn.close() #与服务器断开链接
11 server.close() # 关闭服务器的服务
1 # 客户端
2 import socket #导入socket模块
3 client = socket.socket() #创建一个socket对象
4 client.connect(("192.168.13.132",8000)) #与服务端建立链接
5 client.send(b"456789") #向服务断传输讯息(字节型)
6 data =client.recv(1024) #接服务端传来的讯息 不超过1024字节
7 print(data) # 打印
8 client.close() #关闭客户端
1 import subprocess
2 res = subprocess.Popen("ipconfig",
3 shell= True,
4 stderr=subprocess.PIPE,
5 stdout=subprocess.PIPE
6
7 )
8 print(res.stdout.read().decode("gbk"))
1 # 服务端
2 import socket
3 import subprocess
4 server = socket.socket()
5 server.bind(("192.168.13.132",8000))
6 server.listen(3)
7 print("建立链接中。。。")
8 conn,addr = server.accept()
9 print("等待响应中。。。")
10 while True:
11 cmd = conn.recv(1024).decode("utf-8")
12 res = subprocess.Popen(cmd,
13 shell= True,
14 stderr=subprocess.PIPE,
15 stdout=subprocess.PIPE
16 )
17 result = res.stdout.read()
18 print("响应长度为%s" % len(result))
19 conn.send(result.decode("gbk").encode("utf-8"))
# 客户端
import socket
client =socket.socket()
client.connect(("192.168.13.132",8000))
while True:
user_input = input("请输入dose命令")
client.send(user_input.encode("utf-8"))
result = client.recv(1024).decode("utf-8")
print(result)
1 # 服务端
2 import socket #套接字模块
3 import subprocess
4 import struct
5 server = socket.socket()
6 server.bind(("192.168.13.132",8000))
7 server.listen(3)
8 print("建立链接中。。。")
9 conn,addr = server.accept()
10 print("等待响应中。。。")
11 while True:
12 cmd = conn.recv(1024).decode("utf-8")
13 res = subprocess.Popen(cmd,
14 shell= True,
15 stderr=subprocess.PIPE,
16 stdout=subprocess.PIPE
17 )
18 result = res.stdout.read()
19 error = res.stderr.read()
20 print("响应长度为%s" % len(result))
21 print("错误信息为%s" % error.decode("gbk"))
22 if error:
23 back_message = error
24 else:
25 back_message = result
26 conn.send(struct.pack("i", len(back_message))) # 构建报头
27 conn.send(back_message) # 发送数据
1 # 客户端
2 import socket
3 import struct
4 client =socket.socket()
5 client.connect(("192.168.13.132",8000))
6 while True:
7 user_input = input("请输入dose命令")
8 client.send(user_input.encode("utf-8"))
9 maxbytes = client.recv(4)
10 long = struct.unpack("i",maxbytes)[0]
11 num = 0
12 data = b""
13 while num long:
14 receive = client.recv(1024)
15 data +=receive
16 num +=len(receive)
17 print(data.decode("gbk"))