功能:实现从客户端向服务端发送cmd指令,服务端将结果返回给客户端的功能。
#coding:utf-8
'''服务端'''
import socket,os
server=socket.socket() #创建对象
server.bind(('localhost',2345)) #绑定监听端口(服务器端的IP地址和端口)
server.listen(5) #开始监听TCP传入连接,5指定在拒绝连接之前,操作系统可以挂起的最大连接数量(tcp连接队列的大小,即连接数)
while True:
print'传输数据过来吧。。。'
conn,addr=server.accept() #与客户端建立连接
while True:
print '开始接受数据'
data=conn.recv(1024) #一次允许接受的数据大小
print '数据是:%s'%data
if len(data)==0:
print '没有传数据'
break
data_po=os.popen(data).read() #将命令结果读到data_po中
print '输出内容长度:',len(data_po)
print data_po
print type(data_po)
if len(data_po)==0:
data_po= '输入的命令有误! '
conn.send(str(len(data_po))) #发送总数据的大小给客户端,send里面必须是str类型。
conn.send(data_po)
print isinstance(data_po, unicode) #发送数据给客户端,客户端收到多少数据,取决于它设定可以接受数据的大小。
server.close() #关闭服务端
#coding:utf-8
'''客户端'''
import socket
client=socket.socket()
client.connect(('localhost',2345)) #连接端的IP地址和端口号(这里写的是服务端的IP地址和端口号)
a=0 #统计接受数据的总大小
while True:
data_cl=raw_input('>>:').strip() #输入
if len(data_cl)==0: #不能输入回车、空格字符
print '输入错误,请重新输入'
continue
client.send(data_cl) #发送输入的指令
data_lp=client.recv(1024) #接受服务端数据的大小
while a<=data_lp: #如果接受数 据比总量小,将继续接受,直到接受数的大小大于总量大小
data=client.recv(1024) #一次允许接受的数据大小,通过while循环可以多少实现接受信息量比较大的数据。
a=a+len(data)
print '输出数据长度:',a
print data
data_cl=raw_input('>>:').strip() #输入
client.close() #关闭客户端