最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python socket多線程實現(xiàn)客戶端與服務器連接

 更新時間:2021年09月05日 16:41:39   作者:上不了山的小非洲  
這篇文章主要為大家詳細介紹了python socket多線程實現(xiàn)客戶端與服務器連接,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

python socket多線程實現(xiàn)客戶端與服務器連接,供大家參考,具體內容如下

之前因為一些作業(yè)需要完成一個服務器監(jiān)聽多個客戶端的程序,于是就用python寫了這樣的程序。話不多說,直接上代碼。

server代碼:

import json
import socket
import threading
import time
import struct

class Server():
    def __init__(self):
        self.g_conn_pool = {}  # 連接池
        # 記錄客戶端數(shù)量
        self.num =0
        # 服務器本地地址
        self.address = ('0.0.0.0', 8000)
        # 初始化服務器
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.server_socket.bind(self.address)
        self.server_socket.listen(128)
    def accept_client(self):
        """
            接收新連接
            """
        while True:
            client_socket, info = self.server_socket.accept()  # 阻塞,等待客戶端連接
            print(client_socket,port)
            # 給每個客戶端創(chuàng)建一個獨立的線程進行管理
            thread = threading.Thread(target=self.recv_msg, args=(client_socket,info))
            thread.setDaemon(True)
            thread.start()
    def recv_msg(self,client,info):
        # 提示服務器開啟成功
        print('服務器已準備就緒!')
        client.sendall("connect server successfully!".encode(encoding='utf8'))
        # 持續(xù)接受客戶端連接
        while True:
            try:
                client.sendall(b'Success')
                while True:
                    msg = client.recv(1024)
                    msg_recv = msg.decode('utf-8')
                    if not msg_recv:
                        continue
                    else:
                        recv_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
                        print('客戶端 ' + recv_time + ':\n')
                        print(' ' + msg_recv + '\n')
            except Exception as e:

                print('客戶端斷開連接...')
                exit(-1)
                break
    def start_new_thread(self):
        """啟動新線程來接收信息"""
        thread = threading.Thread(target=self.accept_client, args=())
        thread.setDaemon(True)
        thread.start()

server服務器類,主要是監(jiān)聽以及接收客戶端的信息。

#實例化一個Flask節(jié)點
app = Flask(__name__)


@app.route('/')
def hello():
    return 'hello'


if __name__ == '__main__':
 #創(chuàng)建解析器
    from argparse import ArgumentParser
    parser = ArgumentParser()
    parser.add_argument('-p', '--port', default=5030, type=int, help='port to listen on')
    args = parser.parse_args()
    #獲取端口號
    port = args.port
    #實例化一個server類 并啟動
    py_server = Server()
    py_server.start_new_thread()
    #啟動Flask節(jié)點
    app.run(host='127.0.0.1',port=port)

Client代碼

class Client():

    def __init__(self):
     #服務器ip與端口
        self.server_address = ('127.0.0.1', 8000)
        
        self.num = 0
    def recv_msg(self):
        print("正在連接服務器....")

        # 客戶端連接服務器
        while True:
            try:
                self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                #連接服務器
                self.client_socket.connect(self.server_address)

                num = self.num

                # 制作報頭
                header_dic = {
                    'filename': num
                }
                header_bytes = json.dumps(header_dic).encode('utf-8')
                self.client_socket.send(struct.pack('i', len(header_bytes)))
                self.client_socket.send(header_bytes)
                
    #接收信息
                while True:
                    msg_recv = self.client_socket.recv(1024).decode('gbk')
                    print(msg_recv)

                    if msg_recv == 'Success':
                        print('客戶端已與服務器成功建立連接...')
                    elif not msg_recv:
                        continue
                    else:
                        recv_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
                        print( '服務器 ' + recv_time + ':\n')
                        print(' ' + msg_recv + '\n')

            except:
                print('與服務器斷開連接...')
                break
    def start_new_thread(self):
        """啟動新線程來接收信息"""
        thread = threading.Thread(target=self.recv_msg, args=())
        thread.setDaemon(True)
        thread.start()
        
def main():
    wf = Client()
    wf.start_new_thread()
 while True:
        a = input()
        wf.client_socket.send(a.encode('utf-8'))

if __name__ == '__main__':

    main()

以上為客戶端程序的代碼。

下面是運行的結果:

服務器端:

多個客戶端:

代碼實現(xiàn)還是蠻容易的,具體可以自行修改使用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python使用dis模塊把Python反編譯為字節(jié)碼的用法詳解

    Python使用dis模塊把Python反編譯為字節(jié)碼的用法詳解

    通常來說Python的性能或代碼質量的評估可以通過dis模塊獲取到對應的字節(jié)碼指令來進行評估,因而這里我們就來看一下Python使用dis模塊把Python反編譯為字節(jié)碼的用法詳解:
    2016-06-06
  • django 發(fā)送郵件和緩存的實現(xiàn)代碼

    django 發(fā)送郵件和緩存的實現(xiàn)代碼

    這篇文章主要介紹了django 發(fā)送郵件和緩存的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • tensorflow2 自定義損失函數(shù)使用的隱藏坑

    tensorflow2 自定義損失函數(shù)使用的隱藏坑

    本文主要介紹了tensorflow2 自定義損失函數(shù)使用的隱藏坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • python 自動去除空行的實例

    python 自動去除空行的實例

    今天小編就為大家分享一篇python 自動去除空行的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Django分頁器的用法你都了解嗎

    Django分頁器的用法你都了解嗎

    在我們做Django項目,數(shù)據(jù)量比較大的時候,我們需要分頁器來做分頁顯示,接下來重點給大家介紹利用Django開發(fā)MVT模型項目時分頁器的使用,感興趣的朋友一起看看吧
    2021-05-05
  • python使用hdfs3模塊對hdfs進行操作詳解

    python使用hdfs3模塊對hdfs進行操作詳解

    這篇文章主要介紹了python使用hdfs3模塊對hdfs進行操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python獲取某一進程的CPU利用率的方法詳解

    Python獲取某一進程的CPU利用率的方法詳解

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)獲取某一進程的CPU利用率,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • Python運維之獲取系統(tǒng)CPU信息的實現(xiàn)方法

    Python運維之獲取系統(tǒng)CPU信息的實現(xiàn)方法

    今天小編就為大家分享一篇Python運維之獲取系統(tǒng)CPU信息的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python Word文件自動化實戰(zhàn)之簡歷篩選

    Python Word文件自動化實戰(zhàn)之簡歷篩選

    本文將利用Python自動化做一個具有實操性的小練習,即通過讀取簡歷來篩選出符合招聘條件的簡歷。文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-05-05
  • 使用Python實現(xiàn)調整Excel中的行列順序

    使用Python實現(xiàn)調整Excel中的行列順序

    調整Excel?行列順序指的是改變工作表中行或列的位置,以便更好地展示和分析數(shù)據(jù),本文將介紹如何通過Python高效地調整Excel?行列順序,感興趣的可以了解下
    2025-01-01

最新評論

桐梓县| 海安县| 会理县| 宁蒗| 正镶白旗| 阳山县| 彩票| 东阿县| 通渭县| 探索| 蛟河市| 进贤县| 新丰县| 宜宾县| 民乐县| 额济纳旗| 施甸县| 洪雅县| 仙居县| 万安县| 乐安县| 东莞市| 绩溪县| 奇台县| 兴安县| 杨浦区| 大新县| 牙克石市| 班戈县| 宁波市| 彭阳县| 阜南县| 天柱县| 沁水县| 马鞍山市| 福建省| 辉县市| 和龙市| 房产| 昌图县| 宁国市|