def client_sender(buffer):    client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)##定义socket类型,网络通信,TCP    #Python 提供了两个基本的 socket 模块。    #第一个是 Socket,它提供了标准的 BSD Sockets API。    #第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。    #socket.AF_INET 服务器之间网络通信    #socket.SOCK_STREAM 流式socket , for TCP    try:        # 连接到目标主机        client.connect((target,port))#连接到远程 主机 跟端口        if len(buffer): # 1 号 代码段 如果 有要发送的数据            client.send(buffer) # 进行发送        while True:# 死循环啊 你在等待什么呢            # 现在等数据回传            recv_len = 1 # 做了一个 登录 了 监听            response = ""# 返回的数据 仓库            while recv_len: # 2号 代码段 当 这里,其实这里一直存在,内部的 死循环                # 拿回原来的 数据                data = client.recv(4096)# 一直在等待返回的数据                recv_len = len(data)# 等待 返回的数据                response+=data# 累加 数据                if recv_len < 4096:# 如果返回的数据少于4096                    break            print response,#打印返回的结果            # 等待更多输入            buffer = raw_input("") # 3 号 代码段 重新的等待 输入信息            buffer += "\n" # 添加换行            #发出去            client.send(buffer)# 然后在发送出去    except:# 这里 根本就是个死循环啊,没有异常        print "[*] Exception! Exiting."        #关闭连接        client.close()"""
_____________________________________________________________________________________________________________    现在你应该熟悉这些代码了,我们从建立一个TCP套接字对象开始,首先检测是否已经从标准输入中接收到了数据1。如果一切    正常,我们就将数据发送给远程主机并接收回传数据2,直到没有更多的数据发送回来,然后我们等待用户下一步的输入3并继    续发送和接收数据,直到用户结束脚本运行。    下面附件的那行用来对用户的输入进行特殊处理,这样我们的客户端就能与命令行shell兼容。现在,我们继续创建服务器段    的主循环和子函数,用来对命令行shell的创建和命令执行进行处理。_____________________________________________________________________________________________________________"""

本文转载自麦子学院:http://q.maiziedu.com/article/23229/