连接数据传输服务器的客户端。
(Java数据传输,资源:http://download.csdn.net/detail/AFer198215/3647106)
'''
Created on 2011-9-29
@author: sl
'''
import socket
import struct
class SocketClient():
'''客户端基类'''
def __init__(self, serverIp, serverPort):
self._serverIp = serverIp
self._serverPort = serverPort
def connect(self, command):
self.__client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.__client.connect((self._serverIp,self._serverPort))
self.sendBytes(b'SHAN')
self.sendInt(command)
def sendInt(self, data):
self.sendBytes(struct.pack(">i", int(data)))
def sendLong(self, data):
self.sendBytes(struct.pack(">q", data))
def sendBytes(self, data):
self.__client.send(data)
def recv(self):
return self.__client.recv(512)
def close(self):
self.__client.close()
class TestSocketClient(SocketClient):
'''测试客户端'''
def connect(self):
super().connect(0)
def getMessage(self):
'''返回服务器响应信息.'''
return super().recv()
class DownloadSocketClient(SocketClient):
'''下载文件客户端'''
def connect(self):
super().connect(1)
def downloadFile(self, src, dest):
'''下载
@param src: 远程文件
@param dest: 下载后的文件(本地文件)
'''
#src = "D:\\test\\1\\edass4a.deply.2.zip"
#dest = "d:\\test\\2\\clone.dt"
out = None
self.__sendDownloadRequest(src)
try:
out = open(dest, "wb")
print("download {0} start...".format(src))
while True:
bs = self.recv()
if not bs: break
out.write(bs)
print("download {0} done.".format(src))
except Exception as ex:
print(ex)
finally:
try:
if out: out.close()
except Exception :
pass
def __sendDownloadRequest(self, file, startPosit=0):
'''发送下载请求'''
bs = file.encode("utf-8")
bsLen = len(bs)
self.sendInt(bsLen)
self.sendBytes(bs)
self.sendLong(0)
def t1():
client = SocketClient("192.168.2.23", 8401)
client.connect(0)
bs = client.recv()
print( len(bs))
print(bs.decode("utf-8"))
def t2():
command = 0
print(struct.pack(">i", int(command)))
print(int(command))
def t3():
tc = TestSocketClient("192.168.2.23", 8401)
tc.connect()
print(tc.getMessage())
def t4():
#src = "D:\\test\\1\\as.deply.2.zip"
src = "D:/test/1/1.cmd"
dest = "d:/test/2/clone.dt"
down = DownloadSocketClient("192.168.2.23", 8401)
down.connect()
down.downloadFile(src, dest)
down.close()
if __name__ == "__main__":
t4()
#t3()
#t2()
#t1()