Python網(wǎng)絡(luò)編程

網(wǎng)絡(luò)編程很常用顿膨,很底層,實際上叽赊,http協(xié)議恋沃,也是建立在網(wǎng)絡(luò)編程上的,只是說這一層必指,由nginx或者是apache實現(xiàn)了囊咏。在工作當(dāng)中,在網(wǎng)關(guān)設(shè)備之間傳輸數(shù)據(jù)的時候塔橡,就用到了網(wǎng)絡(luò)編程梅割,剛開始寫的程序部署服務(wù)器后很不穩(wěn)定,客戶端異掣鸺遥或者是斷開連接户辞,服務(wù)端就會斷開,或者是阻塞癞谒,不能再接受到客戶端的信息底燎,或者是處理多個客戶端連接時候沒有好的方案,出了不少問題弹砚,現(xiàn)在總結(jié)下這些問題双仍。

服務(wù)端

#只要一個客戶端連上,就能一直接受客戶端的消息桌吃,是一個長連接
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
config = ("0.0.0.0",6002)
server.bind(config)
server.listen(5)
# 阻塞朱沃,等待(監(jiān)聽)連接,等有客戶端連接之后才會往下執(zhí)行
con,addr = server.accept()
while True:
    print("Client has link the server...")
    try:
        #阻塞茅诱,等待(監(jiān)聽)接受數(shù)據(jù)逗物,收到數(shù)據(jù)之后才會往下執(zhí)行
        msg = con.recv(1024)
        print(msg)
        con.send(b"this is from tcp_server")
    except Exception as e:
        #如果客戶端斷開,那么瑟俭,報錯翎卓,打破while的循環(huán),否則一直while
        print("has stop")
        con.close()
        break

客戶端

# 給tcp服務(wù)器發(fā)送5次消息
import socket
import time
count = 0
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
config = ("192.168.101.67",6002)
client.connect(config)
while count < 5:
    client.send(b"this is from client")
    #到recv()阻塞尔当,等待接受數(shù)據(jù)莲祸,接收到之后接續(xù)執(zhí)行
    print(client.recv(1024))
    count+=1
    time.sleep(1)

服務(wù)端多線程,一個tcp服務(wù)不可能僅僅只解決一個客戶端的請求椭迎,如果按照上面的代碼锐帜,那么,若兩個客戶端同時連接了畜号,那么缴阎,只有在A客戶端的連接關(guān)閉之后,另一個客戶端B的阻塞才能終止简软,也才能和B客戶端通信蛮拔。如果才能夠多個客戶端連上tcp server后述暂,都互不影響,各自做各自的工作呢——這就想到了多線程了建炫。

import socket
import os
import threading

#得到socket
class get_server_socket():
    def __init__(self,ip,port):
        self.port = port
        self.ip = ip
    def get_socket(self):
        server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        config = (self.ip,self.port)
        server_socket.bind(config)
        server_socket.listen(10)
        print("Waiting for client connect...")
        return server_socket
#多線程監(jiān)聽客戶端連接
class get_msg(threading.Thread):
    def __init__(self,socket,num):
        super(get_msg,self).__init__()
        self.socket = socket
        self.num = num
    def spy_client(self):
        # 每一個鏈接都需要創(chuàng)造一個線程畦韭,不然當(dāng)一個線程連接上時候,其他的會阻塞
        con,addr = self.socket.accept()
        while True:
            recv = con.recv(1024) 
            con.send(b"This is reply from server port")
            print(recv)
            print("Current thread number is {}".format(threading.activeCount()))
    def run(self):
        try:
            self.spy_client()
        except Exception as e:
            #如果客戶端主動斷開或者那個線程錯誤肛跌,那么艺配,繼續(xù)延續(xù),防止線程用完
            self.spy_client()

serverSocketInstance = get_server_socket("0.0.0.0",6001)
serverSocket = serverSocketInstance.get_socket()
thread_num = 3
 for x in range(0,thread_num):
     tmp = get_msg(serverSocket,x+1) 
     tmp.start()

服務(wù)端io復(fù)用

新同事所得工具(twisted)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衍慎,一起剝皮案震驚了整個濱河市转唉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稳捆,老刑警劉巖赠法,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乔夯,居然都是意外死亡砖织,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門驯嘱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镶苞,“玉大人喳坠,你說我怎么就攤上這事鞠评。” “怎么了壕鹉?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵剃幌,是天一觀的道長。 經(jīng)常有香客問我晾浴,道長负乡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任脊凰,我火速辦了婚禮抖棘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狸涌。我一直安慰自己沼撕,他們只是感情好谢揪,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般馆纳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侦副,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音驯用,去河邊找鬼。 笑死儒老,一個胖子當(dāng)著我的面吹牛蝴乔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驮樊,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼淘这,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了巩剖?” 一聲冷哼從身側(cè)響起铝穷,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎佳魔,沒想到半個月后曙聂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡鞠鲜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了榆苞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坐漏。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡砰碴,死狀恐怖趁尼,靈堂內(nèi)的尸體忽然破棺而出酥泞,到底是詐尸還是另有隱情婶博,我是刑警寧澤凡人,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響邢隧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纫谅,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一询吴、第九天 我趴在偏房一處隱蔽的房頂上張望汰寓。 院中可真熱鬧跃闹,春花似錦苛秕、人聲如沸艇劫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蟹演。三九已至,卻和暖如春顷蟀,著一層夾襖步出監(jiān)牢的瞬間酒请,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工鸣个, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留羞反,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓囤萤,卻偏偏與公主長得像昼窗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涛舍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)絡(luò)編程 網(wǎng)絡(luò)編程對于很多的初學(xué)者來說膏秫,都是很向往的一種編程技能,但是很多的初學(xué)者卻因為很長一段時間無法進入網(wǎng)絡(luò)編...
    程序員歐陽閱讀 2,014評論 1 37
  • 使用網(wǎng)絡(luò)的目的就是為了聯(lián)通多方然后進行通信用的做盅,即把數(shù)據(jù)從一方傳遞給另外一方缤削。前面的學(xué)習(xí)編寫的程序都是單機的,即不...
    壁花燒年閱讀 1,160評論 0 0
  • 計算機網(wǎng)絡(luò)概述 網(wǎng)絡(luò)編程的實質(zhì)就是兩個(或多個)設(shè)備(例如計算機)之間的數(shù)據(jù)傳輸吹榴。 按照計算機網(wǎng)絡(luò)的定義亭敢,通過一定...
    蛋炒飯_By閱讀 1,227評論 0 10
  • 3 socket模塊-TCP gitbook鏈接:用python帶你進入AI中的深度學(xué)習(xí)技術(shù)領(lǐng)域https://w...
    scrappyzhang閱讀 1,239評論 0 2
  • 充實的一天結(jié)束了。 上午董老師图筹,給我們講述了《甜蜜午睡》活動帅刀,圍繞著午睡,展開了培訓(xùn)远剩】勰纾看似簡簡單單的午...
    菲你沫熟閱讀 198評論 0 0