基於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
Linux下socket程式設計之多執行緒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