Python---Socket远程系统命令
一 * * socket 五层模型里面应用层传输层里面的一组接口 两端通过通信的时候,两个端点有两个socket 模块 引用模块实现通信
1.应用层HTTP/HTTPS python代码 封装之后
传输层 TCP/UDP协议端口 调用socket模块之后
网络层识别的时候用ip地址端口号 元组里面的IP地址和端口号
数据链路层ARP/MAC 接收连接和地址
物理层 硬件 接收发送信息 并且进行关闭
tcp是传输控制 字节流 面向连接 安全可靠 速度慢 相对于UDP一对一
udp是一种用户数据报 ,发送消息不需要链接,速度快 一对多
二 * * TCP代码实现步骤
1.基于TCP实现socket server服务端
1.创建套接字sk=socket.socket()
2.绑定ip地址和端口号 sk.bind(“127.0.0.1”,9000)
3.监听数量listen(3)
4.等待客户端链接 三次握手建立连接 coon,addr=sk.accept()
5.send,recv服务端先发送再接受 再网络端先接受再发送
6.客户端断开连接 四次挥手 断开链接
7.断开套接字 关闭
2.基于TCP的client端
1.创建套接字
2.找到服务端 connect方法 ip 和 端口号连接服务器
3.recv/send
4.断开套接字
三 * * UDP的代码实现 没有建立连接
1.基于UDP实现socket server服务端
1.创建套接字sk=socket.socket()
2.绑定bind ip 和 端口号
3.服务器端先接受信息recvfrom 之后再发送信息sendto
4.最后关闭套接字
2.基于udp 实现 client
1.创建套接字
2.sendto /recvfrom
3.关闭套接字
3.远程套接字字符解码
popen_server代码演示
popen_client代码演示
4.异步 套接字 基于TCP
asy_tcp_server
import socket
from multiprocessingimport Process
def fun(conn):
while True:
conn.send(b"hello")
# 接收发过来的对象
ret = conn.recv(1024)
print(ret.decode("utf-8"))
# 进行关闭
conn.close()
if __name__ =='__main__':
#创建套接字 绑定端口号和ip地址
sk=socket.socket()
sk.bind(("127.0.0.1",9000))
#监听数量 是否有数据连接
sk.listen(3)
#元组结果 客户端和地址 连接数据 三次握手
while True:
conn,addr=sk.accept()
#开启子进程进行执行
p=Process(target=fun,args=(conn,))
#发送信息聊天时循环不间断
p.start()
sk.close()
asy_tcp_client
import socket
#创建套接字 得到对象链接connect前面的ip地址
sk=socket.socket()
sk.connect(("127.0.0.1",9000))
#开始收发消息循环聊天
while True:
ret=sk.recv(1024)
print(ret)
#二进制bytes 发送消息之后关闭
s=input(">>>>>")
sk.send(s.encode("utf-8"))
sk.close()