真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python網(wǎng)絡編程--socket簡單實現(xiàn)-創(chuàng)新互聯(lián)

python網(wǎng)絡編程                         

你所需要的網(wǎng)站建設服務,我們均能行業(yè)靠前的水平為你提供.標準是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站設計、成都網(wǎng)站制作、企業(yè)網(wǎng)站建設、手機網(wǎng)站制作、網(wǎng)頁設計、品牌網(wǎng)站建設、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)擁有實力堅強的技術研發(fā)團隊及素養(yǎng)的視覺設計專才。

一、客戶端控制服務端執(zhí)行命令

server:


#!/usr/local/python3/bin/python3.6
#-*- coding:utf-8 -*-
#AUTH:FJC
from socket import *
from time import ctime
import subprocess
HOST = ''           #HOST變量空白,表示可以使用任何地址
PORT = 21567
BUFSIZ = 1024       #緩沖區(qū)大小為1KB
ADDR = (HOST,PORT)

tcp_ser_sock = socket(AF_INET,SOCK_STREAM)  #創(chuàng)建套接字對象,AF_INET表示面向網(wǎng)絡的,SOCK_STREAM表示用于TCP傳輸?shù)奶捉幼诸愋?tcp_ser_sock.bind(ADDR)     #將地址(主機名、端口號對)綁定到套接字上
tcp_ser_sock.listen(5)  #設置并啟動TCP 監(jiān)聽器,listen的參數(shù)表示連接被轉接或拒絕之前,傳入連接請求的大數(shù)

while True:
    print('waiting for connecting...')
    tcp_cli_sock,addr = tcp_ser_sock.accept()   #返回一個socket對象和屬于客戶端的套接字
    print('...connect from:',addr)
    while True:
        try:
            data = str(tcp_cli_sock.recv(BUFSIZ),'utf8')
        except Exception:
            break
        if not data:
            continue
        obj = subprocess.Popen(data,shell=True,stdout=subprocess.PIPE)
        result = obj.stdout.read()
        tcp_cli_sock.send(bytes(str(len(result)),'utf8'))
        tcp_cli_sock.recv(BUFSIZ)   #解決粘包現(xiàn)象
        tcp_cli_sock.send(result)
    tcp_cli_sock.close()
tcp_ser_sock.close()

client:

#-*- coding:utf-8 -*-
#AUTH:FJC
from socket import *
from sys import exit
HOST = '127.0.0.1'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)

tcp_cli_sock = socket(AF_INET,SOCK_STREAM)
tcp_cli_sock.connect(ADDR)

while True:
    data = input('command>')
    if not data:
        continue
    elif data == ("exit" or "quit"):
        exit(1)
    tcp_cli_sock.send(bytes(data,'utf8'))
    result_len=str(tcp_cli_sock.recv(BUFSIZ),'utf8')
    tcp_cli_sock.send(bytes(1))
    result = bytes()
    while len(result) != int(result_len):
        data_rec = tcp_cli_sock.recv(BUFSIZ)
        result += data_rec
    print(str(result,'gbk'))
# tcp_cli_sock.close()

二、文件上傳下載

server:


#-*- coding:utf-8 -*-
#AUTH:FJC
from socket import *
import os

HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcp_ser_sock = socket(AF_INET,SOCK_STREAM)
tcp_ser_sock.bind(ADDR)
tcp_ser_sock.listen(5)

BASE_DIR=os.path.dirname(os.path.abspath(__file__))

def upload():
    file_size = str(tcp_cli_sock.recv(BUFSIZ), 'utf8')
    file_size = int(file_size)
    file_recv = 0
    with open(path, 'ab') as f:
        while file_recv != file_size:
            data = tcp_cli_sock.recv(BUFSIZ)
            f.write(data)
            file_recv += len(data)
def download():
    file_size = os.stat(path).st_size
    tcp_cli_sock.send(bytes(str(file_size), 'utf8'))
    file_send = 0
    with open(path, 'rb') as f:
        while file_send != file_size:
            data = f.read(1024)
            tcp_cli_sock.send(data)
            file_send += len(data)
if __name__ == '__main__':
    while True:
        print('waiting for connecting...')
        tcp_cli_sock, addr = tcp_ser_sock.accept()
        print('...connect from:', addr)
        try:
            up_down_info = str(tcp_cli_sock.recv(BUFSIZ), 'utf8')
            cmd, path = up_down_info.split('|')
            filename = os.path.basename(path)
            path = os.path.join(BASE_DIR, 'server_dir', filename)
            if cmd == 'get':
                download()
            elif cmd == 'post':
                upload()
        except Exception:
            continue
    tcp_cli_sock.close()

client:

#-*- coding:utf-8 -*-
#AUTH:FJC
from socket import *
from sys import exit
import os

HOST = '127.0.0.1'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)

BASE_DIR=os.path.dirname(os.path.abspath(__file__))

def get():
    file_size = str(tcp_cli_sock.recv(BUFSIZ), 'utf8')
    print(type(file_size))
    file_size = int(file_size)
    file_recv = 0
    with open(path, 'ab') as f:
        while file_recv != file_size:
            data = tcp_cli_sock.recv(BUFSIZ)
            f.write(data)
            file_recv += len(data)
    print("文件下載成功!")
def post():
    file_size = os.stat(path).st_size
    tcp_cli_sock.send(bytes(str(file_size), 'utf8'))
    file_send = 0
    with open(path, 'rb') as f:
        while file_send != file_size:
            data = f.read(1024)
            tcp_cli_sock.send(data)
            file_send += len(data)
    print("文件上傳成功!")

if __name__ == '__main__':
    while True:
        tcp_cli_sock = socket(AF_INET, SOCK_STREAM)
        tcp_cli_sock.connect(ADDR)
        command = input('(command|file)>')
        if not command:
            continue
        elif command == "exit" or command == "quit":
            exit(1)
        cmd,path = command.split('|')
        up_down_info = '%s|%s' % (cmd, path)
        filename = os.path.basename(path)
        tcp_cli_sock.send(bytes(up_down_info, 'utf8'))
        path = os.path.join(BASE_DIR, filename)
        if cmd == 'get':
            get()
        if cmd == 'post':
            post()
        tcp_cli_sock.close()

網(wǎng)絡編程基礎知識


另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


文章名稱:python網(wǎng)絡編程--socket簡單實現(xiàn)-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://weahome.cn/article/djpcij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部