socket__服务端于客户端

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/8/23 15:33
# @Author  : Mr_zhang
# @Site    :
# @File    : 服务端.py
# @Software: PyCharm

from socket import *
import subprocess,struct,json
phone = socket(AF_INET,SOCK_STREAM)
phone.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
phone.bind((‘127.0.0.1‘,8080))
phone.listen(7)

print(‘startting....‘)       #程序运行
while True:
    conn,client_addr = phone.accept()       #等待链接,返回链接消息和客户端的IP和端口
    print(conn,client_addr)              #查看打印信息
    print(‘---------->‘,conn,client_addr)

    while True:
        try:
            cmd = conn.recv(1024)
            if not cmd:break
            res = subprocess.Popen(cmd.decode(‘utf-8‘),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
            stdout = res.stdout.read()
            stderr = res.stderr.read()

            header_dic = {‘total_size‘:len(stdout)+len(stderr),‘filename‘:None,‘md5‘:None}    #制作报头
            header_json = json.dumps(header_dic)        #序列化报头
            header_bytes = header_json.encode(‘utf-8‘)      #序列化转码
            conn.send(struct.pack(‘i‘,len(header_bytes)))
            conn.send(header_bytes)
            conn.send(stdout)
            conn.send(stderr)
        except Exception:
            break
    conn.close()
phone.close()

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/8/23 15:34
# @Author  : Mr_zhang
# @Site    :
# @File    : 客户端.py
# @Software: PyCharm

from socket import *
import struct,json
phone = socket(AF_INET,SOCK_STREAM)
phone.connect((‘127.0.0.1‘,8080))

while True:
    cmd = input(‘>>>:‘).strip()
    if not cmd:continue
    phone.send(cmd.encode(‘utf-8‘))        #发送出去的消息需要转码
    header_len = struct.unpack(‘i‘,phone.recv(4))[0]       #接收到的消息解包   ([0]表示元组中的第一个值(报头))

    header_bytes = phone.recv(header_len)       #接收到的后续包
    header_json = header_bytes.decode(‘utf-8‘)     #基于上一行进行转码
    header_dic = json.loads(header_json)       #饭序列化
    total_size = header_dic[‘total_size‘]        #反序列化之后得到的header_dic中的total_size大小
    recv_size = 0
    total_data = b‘‘
    while recv_size < total_size:
        recv_data = phone.recv(1024)
        recv_size+=len(recv_data)
        total_data+=recv_data
    print(total_data.decode(‘gbk‘))
phone.close()

  

时间: 2024-10-31 11:23:21

socket__服务端于客户端的相关文章

socket__服务端、客户端(注释版)

# !/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/8/22 16:14 # @Author : Mr_zhang # @Site : # @File : server.py # @Software: PyCharm from socket import * import subprocess import struct phone = socket(AF_INET,SOCK_STREAM) phone.setsockopt

关于ntp(时间同步协议)服务端和客户端的配置说明

本文主要写了一些在Linux(CentOS)服务器上配置ntp的经验,事件缘由来源于配置Zabbix监控ntp服务时的测试配置. NTP时间同步协议的服务端(ntpd服务)和客户端(ntpdate服)不能同时运行,即在运行ntpd服务后不能运行ntpdate服务,否则ntpdate服务会提示启动失败,而且日志中也会提示"the NTP socket is in use, exiting",如下图所示. 但客户端运行时,服务端可以运行,但服务端运行时,客户端不能运行,要运行客户端服务,就

socket服务端和客户端

#!/usr/bin/env python#encoding: utf-8import socketdef handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, World") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREA

用Java实现HTTP Multipart的服务端和客户端

今天简单介绍一下如何用Java支持HTTP Multipart的request和response. 整个项目的代码可以在https://github.com/mcai4gl2/multi下载. 在这个程序里,我们的业务场景很简单.在服务端有一个随机数生成器,可以生成随机的Integer和Guid,客户端通过服务,可以请求一个或多个随机数.同时,客户端可以向服务端发送一个或多个随机数,这些随机数会被加入到一个队列中,被其他的客户端通过请求获得.以下是我们的随机数Bean的定义: [java] vi

C# Socket服务端和客户端互相send和receive

服务端 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Net.Sockets; 5 using System.Net; 6 using System.Threading; 7  8 namespace Controller 9 {10     public static class SocketServer11     {12         private stat

CnetOS 6.6 rsync 的服务端和客户端配置

CentOS 6.6 rsync 的服务端和客户端配置 基本信息 系统版本 主机名 IP地址 角色 CentOS  6.6 backup 10.0.0.10 rsync服务端 CentOS  6.6 lamp01 10.0.0.8 rsync客户端 CentOS  6.6 lnmp02 10.0.0.9 rsync客户端 服务端配置 创建rsync配置文件,并写入配置内容(默认rsync文件是不存在的,需要创建) [[email protected] ~]# touch/etc/rsyncd.c

Java网络编程【Socket服务端和客户端】

Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一.Java 网络编程又包括 TCP.UDP,URL 等模块.TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块.URL 对应 URL 模块.其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议.两者之间的异同就不在这里说了,推荐一本入门书籍 <TCPIP入门经典>.我们开始 Socket 服务端和客户端编程吧. 一.Socket 服

SVN1.6服务端和客户端安装配置指导

本节向大家描述SVN1.6服务端和客户端安装配置步骤,随着SVN的快速发展,版本也进行了升级更新,本节就和大家一起学习一下SVN1.6服务端和客户端安装配置步骤,欢迎大家一起来学习.下面是具体介绍.1.软件下载下载SVN1.6服务器程序.http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91[注意]如果之前已经安装了TortoiseSVN客户端,必须选择与之配套的SVN服务端版本,否则会出现各种问题,可以从Tor

grpc(3):使用 golang 开发 grpc 服务端和客户端

1,关于grpc-go golang 可以可以做grpc的服务端和客户端. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://github.com/grpc/grpc-go 和之前写的java的grpc客户端调用相同.也需要使用protobuf的配置文件. 但是golang下面的类库非常的简单,而且golang的性能也很强悍呢. 有些简单的业务逻辑真的可以使用golang进行开发. 性能强悍而且,消耗的资源也很小.java感觉上已