• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
逆光飞翔
逆光飞翔
博客园    首页    新随笔    联系   管理    订阅  订阅

Python模拟服务端

 

本机服务端

import socket

# 获取到socket
sk = socket.socket()

# 获取到地址  ip 和 端口号
address = ('127.0.0.1', 8001)

# 绑定 地址
sk.bind(address)

# 设置 client端的 连接、排队 人数
sk.listen(3)

print('server waiting...')

while True:
    # 阻塞  等待 client连接server
    conn, address = sk.accept()
    print(address)

# 发送数据到client端
    while True:
        # 接收 client端的 数据
        client_data = conn.recv(1024)
        print(str(client_data, "utf8"))

        if not client_data: break

        inp = input('>>>')
        conn.send(bytes(inp, encoding="utf-8"))
# conn.sendall(bytes('服务器关闭', encoding="utf-8"))

conn.close()  # 该客户关闭
# sk.close()  # 服务器关闭 , 此通道不会关闭

跨电脑服务端

import subprocess
import socket

# 获取到socket
sk = socket.socket()

# 获取到地址  ip 和 端口号
address = ('127.0.0.1', 8001)

# 绑定 地址
sk.bind(address)

# 设置 client端的 连接、排队 人数
sk.listen(3)

print('server waiting...')

while True:
    # 阻塞  等待 client连接server
    conn, address = sk.accept()
    print(address)

    # 发送数据到client端
    while True:
        # 接收 client端的 数据
        try:
            client_data = conn.recv(1024)
        except Exception as e:
            break

        # 判断数据是够是空
        if not client_data: break

        print(str(client_data, "utf8"))

        # 获取到结果
        obj = subprocess.Popen(str(client_data, 'utf8'), shell=True, stdout=subprocess.PIPE)
        # 将结果读取出来
        cmd_result = obj.stdout.read()

        result_len = bytes(str(len(cmd_result)), 'utf8')
        conn.sendall(result_len)  # 粘包问题
        conn.recv(1024) # 隔断,解决粘包方法
        # 发送数据到client端
        conn.sendall(cmd_result)

conn.close()  # 该客户关闭
# sk.close()  # 服务器关闭 , 此通道不会关闭

 

做自己的太阳,成为别人的光!
posted @ 2021-09-19 12:00  逆光飞翔-  阅读(107)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3