socket client(tcp)

连接数据传输服务器的客户端。

(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()
    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值