python socket學習

#server.py
#coding:utf-8
import socket

sk = socket.socket()
ip_port = ('127.0.0.1',9999)
sk.bind(ip_port)
sk.listen(5)


while True:
    conn,address = sk.accept()
    conn.send('hello.')
    flag = True
    while flag:
        data = conn.recv(1024)
        print data
        if data =='exit':
            flag = False
        conn.send('sx')
    conn.close()

#client.py
#coding:utf-8

import socket

client = socket.socket()
ip_port = ('127.0.0.1',9999)

client.connect(ip_port)
while True:
    data = client.recv(1024)
    print data
    inp = raw_input('client:')
    client.send(inp)
    if inp =='exit':
        break

異步多線程服務端Server.pypython

#coding:utf-8
import SocketServer

class  MyServer(SocketServer.BaseRequestHandler):

    def setup(self):
        pass

    def handle(self):
        # print self.request,self.client_address,self.server
        #self.request = socket
        #
        conn = self.request
        conn.send('hello.')
        flag = True
        while flag:
            data = conn.recv(1024)
            print data
            if data =='exit':
                flag = False
            conn.send('asd')
        conn.close()

    def finish(self):
        pass

if __name__ == '__main__':
    server = SocketServer.ThreadingTCPServer(('127.0.0.1',9999),MyServer)
    server.serve_forever()

socket 上傳文件
多線程

#!/usr/bin/env python
#coding:utf-8

import SocketServer
import os

class MyServer(SocketServer.BaseRequestHandler):
    def handle(self):
        base_path = 'G:/temp'
        conn = self.request
        print 'connected...'
        while True:
            pre_data = conn.recv(1024)
            #獲取請求方法、文件名、文件大小
            cmd,file_name,file_size = pre_data.split('|')
            #已經接收文件的大小
            recv_size = 0
            #上傳文件路徑拼接
            file_dir = os.path.join(base_path,file_name)
            f = file(file_dir,'wb')
            Flag = True
            while Flag:
                #未上傳完畢,
                if int(file_size)>recv_size:
                    #最多接收1024,可能接收的小於1024
                    data = conn.recv(1024) 
                    recv_size+=len(data)
                #上傳完畢,則退出循環
                else:
                    recv_size = 0
                    Flag = False
                #寫入文件
                f.write(data)
            print 'upload successed.'
            f.close()
    
instance = SocketServer.ThreadingTCPServer(('127.0.0.1',9999),MyServer)
instance.serve_forever()

server
相關文章
相關標籤/搜索