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

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  逆光飞翔-  阅读(97)  评论(0)  编辑  收藏  举报
会员力量,点亮园子希望
刷新页面返回顶部
Copyright © 2024 逆光飞翔-
Powered by .NET 8.0 on Kubernetes