socket - homework

客服端發(fā)送功能請(qǐng)求,服務(wù)器通過(guò)接收的到請(qǐng)求,發(fā)送個(gè)客服端需要的文字或圖片
服務(wù)器

"""__ author__= 小孩子 """

from socket import *
from os import listdir
from threading import *


class ServerThread(Thread):
    def __init__(self, connect, address):
        super().__init__()
        self.connect = connect
        self.address = address

    def run(self) ->None:
        self.func()

    def func(self):
        # 接受消息
        client_data = self.connect.recv(1024).decode()
        print('Client,{}:'.format(self.address[1]), client_data)
        if client_data == 'img':
            self.img_server()
        elif client_data == 'text':
            self.text_server()
        else:
            self.connect.close()
            return

    def img_server(self):
        list_img = str(listdir('../image'))
        while True:
            self.connect.send(list_img.encode())
            # 接受客戶端發(fā)送的文件名
            client_file = self.connect.recv(1024)
            if client_file == 'exit':
                connect.close()
                break
            if client_file.decode() in list_img:
                with open('../image/' + client_file.decode(), 'rb') as file:
                    image = file.read()
                self.connect.send(client_file)
                # 發(fā)送圖片
                self.connect.send(image)
            else:
                self.connect.send('False'.encode())
            self.func()

    def text_server(self):
        while True:
            self.connect.send(input('Server:').encode())
            client_data = self.connect.recv(1024).decode()
            print('Client,{}:'.format(self.address[1]), client_data)
            if client_data == 'exit':
                self.connect.close()


def servers():
    server = socket()
    # 綁定ip地址和端口
    server.bind(('10.7.181.121', 8070))
    # 設(shè)置最大連接數(shù)量
    server.listen(87)
    while True:
        print('監(jiān)聽(tīng)中.....')
        connect, address = server.accept()
        t1 = ServerThread(connect, address)
        print(current_thread())
        t1.start()


if __name__ == '__main__':
    servers()

客戶端

"""__ author__= 小孩子 """

from socket import *


class Clients:
    def __init__(self):
        self.client = socket()
        # 發(fā)送請(qǐng)求
        self.client.connect(('10.7.181.121', 8070))

    def text(self, func: str):
        # 告訴服務(wù)器,你需要什么
        self.client.send(func.encode())
        while True:
            # 接收消息
            server_date = self.client.recv(1024)
            print('Server:', server_date.decode())
            client_data = input('Client:')
            # 發(fā)送消息
            self.client.send(client_data.encode())
            if client_data == 'exit':
                self.client.close()
                break

    def image(self, func: str):
        # 告訴服務(wù)器,你需要什么
        self.client.send(func.encode())
        while True:
            # 接收?qǐng)D片列表
            server_date = self.client.recv(1024)
            print('Server:', server_date.decode())
            client_data = input('Client請(qǐng)輸入圖片名字:')
            # 發(fā)送圖片名字給服務(wù)器
            self.client.send(client_data.encode())
            # 接收文件名
            file_name = self.client.recv(1024).decode()
            if file_name != 'False':
                while True:
                    # 接收消息
                    server_date = self.client.recv(1024)
                    with open(file_name, 'ab') as file:
                        file.write(server_date)
                    if len(server_date) < 1024:
                        print('下載文件成功!')
                        break
            else:
                print('沒(méi)有這個(gè)文件')
            self.inter()

    def inter(self):
        with open('../files/menu.txt', 'r', encoding='utf-8') as file:
            inters = file.read()
        print(inters)
        function = input('請(qǐng)選擇功能:')
        while True:
            if function == 'text':
                self.text(function)
            elif function == 'img':
                self.image(function)
            else:
                self.client.close()
                break


def main():
    clients = Clients()
    clients.inter()


if __name__ == '__main__':
    main()


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 計(jì)算機(jī)網(wǎng)絡(luò)概述 網(wǎng)絡(luò)編程的實(shí)質(zhì)就是兩個(gè)(或多個(gè))設(shè)備(例如計(jì)算機(jī))之間的數(shù)據(jù)傳輸。 按照計(jì)算機(jī)網(wǎng)絡(luò)的定義,通過(guò)一定...
    蛋炒飯_By閱讀 1,369評(píng)論 0 10
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,674評(píng)論 1 32
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,448評(píng)論 6 13
  • 點(diǎn)擊查看原文 Web SDK 開(kāi)發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 14,317評(píng)論 0 15
  • 一個(gè)星期過(guò)去了,終于敢正視她的眼神。其實(shí)自己沒(méi)做錯(cuò),不知為何會(huì)膽怯?只是心里已經(jīng)不再難過(guò)了,關(guān)于她的一切也不會(huì)敏感...
    Janeyn閱讀 173評(píng)論 0 0

友情鏈接更多精彩內(nèi)容