socket 练习 sendcommand

__author__ = ‘zhaobin022‘

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

class MyServer(SocketServer.BaseRequestHandler):

    def handle(self):
        # print self.request,self.client_address,self.server
        conn = self.request
        conn.sendall(‘from %s%s ‘ % self.client_address )
        Flag = True
        while Flag:
            data = conn.recv(1024)
            if data == ‘sendcommand‘:
                conn.sendall(‘ready‘)
                command = conn.recv(1024)
                p=subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
                (stdoutput,erroutput) = p.communicate()
                print (stdoutput,erroutput)
                if len(erroutput) == 0:
                    total = len(stdoutput)
                    conn.sendall(‘total‘)
                    data = conn.recv(1024)
                    if data == ‘ready‘:
                        conn.sendall(str(total))
                        data = conn.recv(1024)
                        if data == ‘begin‘:
                            conn.sendall(stdoutput)

                else:
                    conn.sendall(‘error‘)
                    print ‘send error‘
                    data = conn.recv(1024)
                    if data == ‘senderror‘:
                        print ‘in senderror errouput‘
                        conn.sendall(erroutput)

            elif data == ‘exit‘:
                break

if __name__ == ‘__main__‘:
    server = SocketServer.ThreadingTCPServer((‘127.0.0.1‘,8009),MyServer)
    server.serve_forever()
__author__ = ‘zhaobin022‘
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import socket

ip_port = (‘127.0.0.1‘,8009)
sk = socket.socket()
sk.connect(ip_port)
sk.settimeout(5)
data = sk.recv(1024)
print ‘receive:‘,data

while True:

    inp = raw_input(‘please input:‘)
    sk.sendall(‘sendcommand‘)
    data = sk.recv(1024)
    if data == ‘ready‘:
        sk.sendall(inp)
    data = sk.recv(1024)
    if data == ‘total‘:
        sk.sendall(‘ready‘)
        data = sk.recv(1024)
        print data
        total  = int(data)
        receive = 0
        sk.sendall(‘begin‘)
        while True:
            data = sk.recv(1024)
            receive += len(data)
            if total == receive:
                print data
                sk.sendall(‘finish‘)
                break
    elif data == ‘error‘:
        print ‘in error‘
        sk.sendall(‘senderror‘)
        data = sk.recv(8192)
        print data
sk.close()
时间: 2024-10-25 15:53:41

socket 练习 sendcommand的相关文章

c#上传下载ftp(支持断点续传)

using System;using System.Net;using System.IO;using System.Text;using System.Net.Sockets;namespace ftpGet{    /// <summary>    /// FTP Client    /// </summary>    public class FTPClient    {        构造函数        登陆字段.属性        链接        传输模式    

[转载]C# FTP操作工具类

本文转载自<C# Ftp操作工具类>,仅对原文格式进行了整理. 介绍了几种FTP操作的函数,供后期编程时查阅. 参考一: using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; using System.Globalization; namespace FtpTest1 { public class FtpWeb { string ftpServe

C#通过FTP账号上传、修改、删除文件 FTPClient

下面类文件中,主要做的工作是:从ftp服务器上下载文件把本地文件替换.添加.或删除功能,在替换本地文件时会先备份一下本地的文件,若整个操作都完成了就会发出commit命令,表示全部替换成功.若中间操作有失败的,则把本地文件回滚到替换前的样子. 描述: SynchroDataTest.cs(Winform页面类)中的addfiles数组代表要下载到本地的文件(有可能是添加或替换),delfiles数组是要把本地的这些文件删除的数组 string[] addfiles = new string[]

FTP操作使用

FTP(文件传输协议) FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件.在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)."下载"文件就是从远程主机拷贝文件至

FTPClient

using System;using System.Net;using System.IO;using System.Text;using System.Net.Sockets;using System.Threading; public class FTPClient{    public static object obj = new object(); #region 构造函数    /// <summary>    /// 缺省构造函数    /// </summary> 

Java通过socket实现smtp协议发送邮件

import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;import java.net.UnknownHostException; import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; /** 

phoenixframe平台连接socket服务器,并接收返回值的示例

package org.phoenix.cases.webservice; import java.util.LinkedList; import org.phoenix.action.WebElementActionProxy; import org.phoenix.model.CaseLogBean; import org.phoenix.model.UnitLogBean; import org.phoenix.utils.NetTelnet; /** * phoenixframe平台连接

socket实现两台FTP服务器指定目录下的文件转移(不依赖第三方jar包)

通过socket实现两台FTP服务器指定目录下的文件转移,其中包含了基础了ftp文件列表显示.上传和下载.这里仅供学习用,需掌握的点有socket.ftp命令.文件流读取转换等 完整代码如下: FtpFileTransfer.java package com.xxx.ftp.client; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io

FTP使用Socket SSL流程认证(一)

关于Ftp使用SSL流程认证 本文章使用的是C#,ftp服务器为FileZilla 注:如果不是使用的Socket可以使用FtpWebRequst类,说实话,该类比较简单,但现在说的是SOCKET,网上关于这方面的实在太少了 流程(不会画图,就笔述) 大致流程: 一.ssl的认证 1.连接到指定的ftp服务器(当前还未登陆) 2.发送"AUTH SSL"或"AUTH TLS"命令,返回234则成功 3.使用刚才连接的socket创建SSLSTream对象 创建对象示