• python之socket


    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

    socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

    socket和file的区别:

    • file模块是针对某个指定文件进行【打开】【读写】【关闭】
    • socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】

    服务端代码

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import socket
    import subprocess
    import time
    ip_port = ('127.0.0.1',9999)

    sk = socket.socket() #默认TCP接口,这里生成一个句柄
    sk.bind(ip_port) #绑定IP和端口
    sk.listen(5) #监听,5带表最大允许连5个

    while True:
    print('server waiting...')
    conn,addr = sk.accept() #等待链接.如果获取到链接,就会自动生成一个实例.返回两个值,conn是生成的实例,addr代表地址
    while True:
    client_data = conn.recv(1024)
    if not client_data:break
    print("recv",client_data)
    cmd_call = subprocess.Popen(client_data,shell=True,stdout=subprocess.PIPE)
    cmd_result = cmd_call.stdout.read()
    if len(cmd_result) == 0:
    cmd_result = "cmd execution has no output."
    ack_msg = b"CMD_RESULT_SIZE|%s" % len(cmd_result)
    conn.sendall(ack_msg)
    client_ack = conn.recv(50)
    if client_ack.decode() == 'CLIENT_READY_TO_RECV':
    conn.sendall(cmd_result)
    conn.close()

    客户端代码:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import socket

    ip_port = ('127.0.0.1',9999)
    sk = socket.socket()
    sk.connect(ip_port)
    while True:
    user_input = raw_input("cmd>>:").strip()
    if len(user_input)==0:continue
    if user_input == 'q':break
    sk.sendall(user_input)
    server_ack_msg = sk.recv(100)
    cmd_res_size = str(server_ack_msg).split('|')
    if cmd_res_size[0] == "CMD_RESULT_SIZE":
    cmd_res_size = int(cmd_res_size[1])
    sk.sendall("CLIENT_READY_TO_RECV")
    res = ''
    received_size = 0
    while received_size < cmd_res_size:
    date = sk.recv(500)
    received_size +=len(date)
    res += date
    else:
    print(res)
    print('-----recv done-----')
    sk.close()

    更多内容:http://www.cnblogs.com/wupeiqi/articles/5040823.html
  • 相关阅读:
    Java中的权限修饰符
    return,break,continue三者的区别
    JS代码放在不同位置的区别
    创建画笔工具
    关于SPH的核函数求导过程
    c++多级指针与“多维”数组 摘自别人博客
    RAP开发入门-搭建RAP开发环境(一)
    06 media媒体查询
    resolution 像素密度
    手动配置viewport-04
  • 原文地址:https://www.cnblogs.com/TaleG/p/6685443.html
Copyright © 2020-2023  润新知