1. 程式人生 > >基於threading模組下Thread,實現多執行緒TCP套接字通訊

基於threading模組下Thread,實現多執行緒TCP套接字通訊

伺服器

import socket
from threading import Thread
import struct, json

IP = '127.0.0.1'
PORT = 8080
ADD = (IP, PORT)

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADD)
server.listen(5)


def task(conn):
    '''
    在子執行緒內,實現對應客戶端等待輸入和資料處理
    :param conn:
    :return:
    '''
    while True:
        try:
            b_header = conn.recv(struct.unpack('i', conn.recv(4))[0])
            header = json.loads(b_header.decode('utf-8'))
            user = header['user']
            msg = header['msg']
            print('%s : %s' % (user, msg))
        except ConnectionResetError:
            break
        except struct.error:
            break


if __name__ == '__main__':
    # 等待建立連結,並且執行執行緒
    while True:
        conn, c_add = server.accept()
        t = Thread(target=task, args=(conn,))
        t.start()

>>>client_1 : nihao
>>>client_2 : nihao
>>>client_1 : 你好
>>>client_3 : hello
 

客戶端 1/2/3/4……

import socket,struct,json

IP = '127.0.0.1'
PORT = 8080
S_ADD = (IP,PORT)

client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(S_ADD)


while True:
    msg = input('請輸入(q退出)>>>').strip()
    if msg == 'q':
        break
    header = {
        'user': 'client_1',  # 對應修改
        'msg': msg
    }
    j_header = json.dumps(header)
    b_header = j_header.encode('utf-8')
    s_header = struct.pack('i',len(b_header))

    client.send(s_header)
    client.send(b_header)

>>>請輸入(q退出)>>>nihao
>>>請輸入(q退出)>>>

注:

1.可以同一個py檔案多次執行,作為多程序進行連線。

2.未設定連線數限制,即可以無限建立連線。限制方式:執行緒池

相關推薦

基於threading模組Thread實現執行TCP通訊

伺服器 import socket from threading import Thread import struct, json IP = '127.0.0.1' PORT = 8080 ADD = (IP, PORT) server = socket.socket

基於TCP協議實現Linux客戶端與伺服器之間的通訊實現執行程序伺服器

TCP是TCP/IP協議族中一個比較重要的協議,這是一種可靠、建立連結、面向位元組流的傳輸,工作在傳輸層。和TCP相對的不可靠、無連結、面向資料報的協議UDP,瞭解UDP客戶端與伺服器之間通訊請戳UDP協議實現的伺服器與客戶端通訊 TCP協議建立連線 首

乾貨!執行池+CountDownLatch實現 執行併發計算、彙總

目錄結構 抽象類:求和器 單執行緒 求和器 VS 多執行緒 求和器 1)執行緒池 多個執行緒 一起併發執行,效能很生猛 2)CountDownLatch 主執行緒 使用 latch.await() 阻塞住,直到所有 子任務 都執行完畢了

Java執行實現(程序與執行的概念、Java繼承Thread實現執行、Java實現Runnable介面實現執行Thread與Runnable的區別、實現Callable介面實現執行

1 程序與執行緒 1.1 程序與執行緒的概念 什麼是程序?   程序: 作業系統中一個程式的執行週期。(比如我們想要在電腦上登入QQ,從雙擊qq按鈕---->關閉qq這個過程就是一個程序)   多程序: 同一時刻跑多個程式。   在DOS(磁碟作業系統時

執行概念狀態及狀態之間的關係實現執行方法實現同步執行的方式

1.執行緒概念:是程序中的一個執行控制單元,執行路徑;一個程序中至少有一個執行緒在負責控制程式稱為單執行緒;一個程序中有多個執行路徑時,這個程式稱為多執行緒 2.狀態:就緒,執行,synchronize阻塞,wait和sleep掛起,結束 3.狀態之間的關係:呼叫執行緒的s

linux C++如何實現執行

多執行緒是多工處理的一種特殊形式,多工處理允許讓電腦同時執行兩個或兩個以上的程式。一般情況下,兩種型別的多工處理:基於程序和基於執行緒。 基於程序的多工處理是程式的併發執行。 執行緒的多工處理是同一程式的片段的併發執行。 多執行緒程式包含可以同時執行的兩個或多個

叢集的kafka實現執行消費

上一篇文章講述瞭如何部署kafka叢集,而這篇文章則來探討一下如何使用多執行緒消費,提高消費能力,保障資料的時效性。而實現多執行緒消費其實很簡單,只需要三步即可: 一:kafka叢集配置 多執行緒消費,說白了就是多區消費,kafka可以給topic設定多個p

Linuxsocket程式設計之執行TCP伺服器

程式碼如下: thread_server.c #include<string.h> #include<stdlib.h> #include<stdio.h> #include<sys/types.h> #i

CentOS7基於FPM模式編譯LAMP實現虛擬主機應用wordpress

lamp、wordpress該實驗需要的軟件環境:apr-1.6.2.tar.gz httpd-2.4.27.tar.bz2 php-7.1.10.tar.xzapr-util-1.6.0.tar.gz mariadb-10.2.8-linux-x86_64.tar

如何實現執行實現執行為什麼要調start而不是run方法?(繼承Thread類、實現Ruable介面、Callable<V>)

什麼是程序? 作業系統中一個程式的執行週期(從開啟到關閉)。程序是具有一個或多個執行緒的執行緒組。 什麼是執行緒? 一個程序可以同時執行多個任務,任務就是執行緒,一個程序至少有一個執行緒。 執行緒執行在程序內部,執行緒是輕量級程序。 程序和執行緒比較:

OkHttp實現執行斷點續傳下載單例模式工下載管理器一起拋掉sp,sqlite的輔助吧

        最近專案需要使用到斷點下載功能,筆者比較喜歡折騰,想方設法拋棄SharedPreferences,尤其是sqlite作記錄輔助,改用臨時記錄檔案的形式記錄下載進度,本文以斷點下載為例。先看看demo執行效果圖:               斷點續傳:記

如何實現執行實現執行為什麼要調start而不是run方法?(繼承Thread類、實現Ruable介面、Callable)

什麼是程序? 作業系統中一個程式的執行週期(從開啟到關閉)。程序是具有一個或多個執行緒的執行緒組。 什麼是執行緒? 一個程序可以同時執行多個任務,任務就是執行緒,一個程序至少有一個執行緒。 執行緒執行在程序內部,執行緒是輕量級程序。 程序和執行緒比較: 與

Java併發程式設計(6):Runnable和Thread實現執行的區別(含程式碼)

Java中實現多執行緒有兩種方法:繼承Thread類、實現Runnable介面,在程式開發中只要是多執行緒,肯定永遠以實現Runnable介面為主,因為實現Runnable介面相比繼承Thread類有如下優勢: 1、可以避免由於Java的單繼承特性而帶來的侷限; 2、增強程式的健壯性,程式碼能夠被多個執行

利用web work實現執行非同步機制打造頁面單步除錯IDE

我們已經完成了整個編譯器的開發,現在我們做一個能夠單步除錯的頁面IDE,完成本章程式碼後,我們可以實現下面如圖所示功能: 頁面IDE可以顯示每行程式碼所在的行,單擊某一行,在改行前面會出現一個紅點表示斷點,點選Parsing按鈕後,進入單步除錯模式,然後每點一次step按鈕,頁

Java 實現執行Thread Runnable Callable 三種方式

Java 多執行緒 java 實現 多執行緒 三種方法 1. 繼承Thread重寫 run方法。 2.實現Runnable的run方法。無返回值。一個類可以實現多個介面。 3.實現Callable的call方法。有返回值,可以丟擲執行緒錯誤。一個類可以實現多個介面。 public class

C#執行基礎實現主子執行有序輸出

建立控制檯程式 using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace AsyncThread { publi

java執行系列(一):Thread、Runnable、Callable實現執行的區別

實現多執行緒 java實現多執行緒的方法有三種,分別是繼承thread類,實現runnable介面,實現callable介面(call方法有返回值) /** * 繼承Thread */ public class MyThread extends Thread{ int a = 0;

Qt實現執行的串列埠通訊

簡述 Qt下無論是RS232、RS422、RS485的串列埠通訊都可以使用統一的編碼實現。本文把每路串列埠的通訊各放在一個執行緒中,使用movetoThread的方式實現。 程式碼之路 用SerialPort類實現串列埠功能,Widget類呼叫串列埠。 serialport.h如

#Java執行學習那麼如何實現執行呢?

程序和執行緒的區別: 程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換會有較大的開銷,一個程序包含1–n個執行緒。 執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒有獨立的執行棧和程式計數器(PC),執行緒切換開銷小。 執行緒和程序一樣分

呼叫一個方法直接實現執行執行任務

import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.concurrent.LinkedBlockingQueue; import ja