欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

之前因為一些作業(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()

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

下面是運行的結(jié)果:

服務器端:

多個客戶端:

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

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

相關(guān)文章

  • python中的Elasticsearch操作匯總

    python中的Elasticsearch操作匯總

    這篇文章主要介紹了python中的Elasticsearch操作匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 解決pandas .to_excel不覆蓋已有sheet的問題

    解決pandas .to_excel不覆蓋已有sheet的問題

    今天小編就為大家分享一篇解決pandas .to_excel不覆蓋已有sheet的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python判斷給定的字符串是否是有效日期的方法

    python判斷給定的字符串是否是有效日期的方法

    這篇文章主要介紹了python判斷給定的字符串是否是有效日期的方法,涉及Python針對字符串與日期操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • django最快程序開發(fā)流程詳解

    django最快程序開發(fā)流程詳解

    這篇文章主要介紹了django最快程序開發(fā)流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • pytorch加載語音類自定義數(shù)據(jù)集的方法教程

    pytorch加載語音類自定義數(shù)據(jù)集的方法教程

    這篇文章主要給大家介紹了關(guān)于pytorch加載語音類自定義數(shù)據(jù)集的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Python中異常重試的解決方案詳解

    Python中異常重試的解決方案詳解

    這篇文章主要給大家介紹了在Python中異常重試的解決方案,文中介紹的非常詳細,相信對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面隨著小編一起來看看吧。
    2017-05-05
  • Python檢測一個對象是否為字符串類的方法

    Python檢測一個對象是否為字符串類的方法

    這篇文章主要介紹了Python檢測一個對象是否為字符串類的方法,即檢測是一個對象是否是字符串對象,本文還講解了一個有趣的判斷方法,需要的朋友可以參考下
    2015-05-05
  • python使用ProjectQ生成量子算法指令集

    python使用ProjectQ生成量子算法指令集

    在量子計算機領(lǐng)域,由于實現(xiàn)方案的不同,在不同的體系內(nèi)的指令集其實是不一樣的,并不是說OpenQASM里面的所有指令都會被支持。但是這也沒有關(guān)系,因為本文將要介紹的開源量子計算模擬器框架ProjectQ可以支持將輸入的量子算法分解到對應的指令集中。
    2021-05-05
  • Python中的類學習筆記

    Python中的類學習筆記

    這篇文章主要介紹了Python中的類學習筆記,本文是個人學習總結(jié),用實例講解了類的定義、訪問控制等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Python裝飾器結(jié)合遞歸原理解析

    Python裝飾器結(jié)合遞歸原理解析

    這篇文章主要介紹了Python裝飾器結(jié)合遞歸原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07

最新評論