zoukankan      html  css  js  c++  java
  • 网络编程~~~ socket(套字节)

    一 socket (套接字)

    1. socket处于应用层与传输层之间,提供了一些简单的接口,避免与操作系统之间的对接,省去了相当繁琐复杂的操作.
    2. socket在python中属于一个模块,通过调用模块中已经实现的方法建立两个进程之间的连接和通信。

    1.1 基于TCP协议的socket通信

    服务器端:

    import socket
    phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.bind(('127.0.0.1',8848))
    phone.listen()
    print('开机')
    while 1:
        conn,addr = phone.accept()
        while 1:
            try:
                from_client_data = conn.recv(1024).decode("utf-8")
                if from_client_data.upper() == "Q":
                    print('客户端已正常断开连接')
                    break
                else:
                    print(f'来自客户端的消息:{from_client_data}')
                    while 1:
                        to_client_data = input('>>>')
                        if not to_client_data:
                            print('内容不能为空!')
                            continue
                        else:
                            conn.send(to_client_data.encode('utf-8'))
                            break
            except ConnectionResetError:
                print('客户端异常断开连接')
                break
        conn.close()
    phone.close()
    

    客户端:

    import socket
    phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.connect(('127.0.0.1',8848))
    while 1:
        try:
            data = input('>>>')
            if not data:
                print('内容不能为空!')
                continue
            phone.send(data.encode('utf-8'))
            if data.upper() == "Q":
                break
            else:
                from_server_data = phone.recv(1024).decode('utf-8')
                print(f'来自服务器的消息:{from_server_data}')
        except ConnectionResetError:
            print('服务器异常断开连接')
            break
    phone.close()
    

    实例: 远程执行命令

    调用subprocess模块

    import subprocess
    
    obj = subprocess.Popen('dir1',
                           shell=True,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE,
                           )
    print(obj.stdout.read().decode('gbk'))  # 正确命令
    print(obj.stderr.read().decode('gbk'))  # 错误命令
    

    1.2 socket缓存区

    为什么会存在缓存区:

    1. 暂时存储一些数据
    2. 在网络波动时,保证数据的收发稳定,匀速
    3. 缺点: 造成了粘包现象之一
  • 相关阅读:
    洛谷P4175 网络管理
    洛谷P2605 基站选址
    洛谷P3723 礼物
    bzoj3771 Triple
    洛谷P3321 序列统计
    bzoj2194 快速傅里叶之二
    1109课堂内容整理
    响应式网页
    表单隐藏域有什么作用?
    1106课堂笔记
  • 原文地址:https://www.cnblogs.com/lav3nder/p/11802129.html
Copyright © 2011-2022 走看看