欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 基于TCP协议的套接字编程

程序员文章站 2022-05-15 14:22:41
[TOC] 基于TCP协议的套接字编程 实现电话沟通为例,这里传递的是字符,可以自己尝试去发送一个文件 模拟ssh远程执行命令(linux系统) 学习最有效的方法一定是有输入,一定要输出,这样学的东西才能真正得有用 ......

基于tcp协议的套接字编程

实现电话沟通为例,这里传递的是字符,可以自己尝试去发送一个文件

# 服务端
import socket
# 1. 符合tcp协议的手机
server = socket.socket(socket.af_inet,socket.sock_stream)  # tcp

# 2. 绑定手机号 一个服务器,我们自己的电脑作为服务器的话,用自己的ip地址
server.bind(('127.0.0.1',8000))  # 127.0.0.1 代表本地
# server.bind(('192.168.11.251',8000))  

server.listen(5) # 半连接池  可以同时接收5个客户端
# 3. 等待客户端连接
print('start...')
# 链接循环
while true:
    # 通信循环
    conn,client_addr = server.accept()
    while true:
        try:
            # 4. 收到信息 receive
            data = conn.recv(1024) # 每次接收多少字节,如果改为10,客户端输入dir,(可以在cmd中输入 dir,看看会得到什么) ,会出现什么情况呢,下次的博客会讲到粘包问题,以及如何处理粘包问题
            print(data)
            # 5. 回消息
            conn.send(data.upper())
        except connectionabortederror:
            continue
        except connectionreseterror:
            break
# 客户端1
import socket

# 1. 创建符合tcp协议的手机
client = socket.socket(socket.af_inet,socket.sock_stream)

# 2. 拨号
client.connect(('127.0.0.1',8000))

while true:
    msg = input('please enter your msg') # dir
    # 3. 发送消息
    client.send(msg.encode('utf8'))
    
    # 4. 接收消息
    data = client.recv(1024)
    print(data)
# 客户端2
import socket

# 1. 创建符合tcp协议的手机
client = socket.socket(socket.af_inet,socket.sock_stream)

# 2. 拨号
client.connect(('127.0.0.1',8000))
# msg = input('please enter your msg>>>')

# 3. 发送消息
client.send('hello'.encode('utf8'))
client.send('world'.encode('utf8'))

# 4. 接收信息
data = client.recv(1024)
print(data)

模拟ssh远程执行命令(linux系统)

# ssh服务端
import socket
import subprocess

server = socket.socket(socket.af_inet,socket.sock_stream)

server.bind(('192.168.11.251',8000))  # 这是我的机子,客户端可以是其他人的机子
server.listen(5)

print('start...')
while true:
    conn,cient_addr = server.accept()
    print(client_addr) # 打印出的是其他人机子的ip
    
    while true:
        try:
            cmd = conn.recv(1024) # dir
            print(cmd)
            
            # 帮你执行cmd命令,然后把执行结果保存到管道里
            pipeline = subprocess.popen(cmd.decode('utf8'),
                                       shell = true,
                                       stderr = subprocess.pipe, # std 标准
                                       stdout = subprocess.pipe)
            
            stderr = pipeline.stderr.read()
            stdout = pipeline.stdout.read()
            
            conn.send(stderr)
            conn.send(stdout)
        except connectionreseterror:
            break
# ssh客户端
import socket

# 1.创建符合tcp协议的手机
client = socket.socket(socket.af_inet,socket.sock_stream)

# 2. 拨号
client.connect(('192.168.11.210',8000))

while true:
    msg = input('please enter your msg') # dir
    # 3. 发送消息
    client.send(msg.encode('utf8'))
    
    # 4. 接收消息
    data = client.recv(10)
    print(data.decode('gbk')) # 在mac电脑上可能是'utf8'

学习最有效的方法一定是有输入,一定要输出,这样学的东西才能真正得有用