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

Python簡(jiǎn)單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽(tīng)功能示例

 更新時(shí)間:2018年01月03日 13:51:18   作者:officercat  
這篇文章主要介紹了Python簡(jiǎn)單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽(tīng)功能,結(jié)合實(shí)例形式分析了Python基于socket構(gòu)建客戶端與服務(wù)器端通信相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python簡(jiǎn)單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽(tīng)功能。分享給大家供大家參考,具體如下:

最近在研究boost C++庫(kù),用于工作中處理大規(guī)模高并發(fā)TCP連接數(shù)據(jù)響應(yīng),想測(cè)試,也可以用boost::asio庫(kù)來(lái)寫(xiě),但不利于測(cè)試代碼的靈活修改。

于是就研究了一下python怎么做。學(xué)習(xí)過(guò)程中看到網(wǎng)上給出的代碼示例雖然很基礎(chǔ)易懂,對(duì)于python零基礎(chǔ)的人來(lái)說(shuō),完全可以稍微復(fù)雜些,配上一些注釋,就能更多掌握一些socket和python的基本語(yǔ)法知識(shí)。

于是根據(jù)我的使用需要,修改python的socket server和client的范例代碼如下:

server端(單線程)

# -*- coding: cp936 -*-
'''''
建立一個(gè)python server,監(jiān)聽(tīng)指定端口,
如果該端口被遠(yuǎn)程連接訪問(wèn),則獲取遠(yuǎn)程連接,然后接收數(shù)據(jù),
并且做出相應(yīng)反饋。
'''
if __name__=="__main__":
    import socket
  print "Server is starting"
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost', 8001)) #配置soket,綁定IP地址和端口號(hào)
    sock.listen(5) #設(shè)置最大允許連接數(shù),各連接和server的通信遵循FIFO原則
    print "Server is listenting port 8001, with max connection 5"
    while True: #循環(huán)輪詢socket狀態(tài),等待訪問(wèn)
        connection,address = sock.accept()
        try:
            connection.settimeout(50)
            #獲得一個(gè)連接,然后開(kāi)始循環(huán)處理這個(gè)連接發(fā)送的信息
            '''''
            如果server要同時(shí)處理多個(gè)連接,則下面的語(yǔ)句塊應(yīng)該用多線程來(lái)處理,
            否則server就始終在下面這個(gè)while語(yǔ)句塊里被第一個(gè)連接所占用,
            無(wú)法去掃描其他新連接了,但多線程會(huì)影響代碼結(jié)構(gòu),所以記得在連接數(shù)大于1時(shí)
            下面的語(yǔ)句要改為多線程即可。
            '''
            while True:
                buf = connection.recv(1024)
                print "Get value " +buf
                if buf == '1':
                  print "send welcome"
                  connection.send('welcome to server!')
                elif buf!='0':
                  connection.send('please go out!')
                  print "send refuse"
                else:
                  print "close"
                  break #退出連接監(jiān)聽(tīng)循環(huán)
        except socket.timeout: #如果建立連接后,該連接在設(shè)定的時(shí)間內(nèi)無(wú)數(shù)據(jù)發(fā)來(lái),則time out
             print 'time out'
        print "closing one connection" #當(dāng)一個(gè)連接監(jiān)聽(tīng)循環(huán)退出后,連接可以關(guān)掉
        connection.close()

client端,每隔3秒輪番發(fā)送不同的數(shù)據(jù)給server:

if __name__=="__main__":
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('localhost', 8001))
    import time
    flag = '1'
    while True:
        time.sleep(3)
        print 'send to server with value: '+ flag
        sock.send(flag)
        print sock.recv(1024)
        flag = (flag=='1') and '2' or '1' #change to another type of value each time
    sock.close()

執(zhí)行上面兩段代碼后,可以得到如下結(jié)果:

先執(zhí)行server.py:

C:\Users\YanBo>D:\server.py
Server is starting
Server is listenting port 8001, with max connection 5

執(zhí)行client后:

C:\Users\YanBo>D:\client.py
send to server with value: 1
welcome to server!
send to server with value: 2
please go out!
send to server with value: 1
welcome to server!
send to server with value: 2
please go out!
.....

server則相應(yīng)輸出:

Get value 1
send welcome
Get value 2
send refuse
.....

如果在linux下,用

$ lsof -i:8001

則可以列出正在執(zhí)行的server和client進(jìn)程,因?yàn)樗麄冋加昧硕丝?001

yanbo@yanbo-linux64-01:~$ lsof -i:8001
COMMAND PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
python 2413 yanbo  3u IPv4 12907   0t0 TCP localhost:8001 (LISTEN)
python 2413 yanbo  4u IPv4 12910   0t0 TCP localhost:8001->localhost:38609 (ESTABLISHED)
python 2469 yanbo  3u IPv4 12222   0t0 TCP localhost:38609->localhost:8001 (ESTABLISHED)

可以看出,進(jìn)程2413是server.py 2469是client.py

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 對(duì)Python 窗體(tkinter)文本編輯器(Text)詳解

    對(duì)Python 窗體(tkinter)文本編輯器(Text)詳解

    今天小編就為大家分享一篇對(duì)Python 窗體(tkinter)文本編輯器(Text)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python實(shí)用小知識(shí)之對(duì)象間的比較

    Python實(shí)用小知識(shí)之對(duì)象間的比較

    == 和 is 是 Python 中對(duì)象比較常用的兩種方式,簡(jiǎn)單來(lái)說(shuō),'==' 操作符比較對(duì)象之間的值是否相等,下面這篇文章主要給大家介紹了關(guān)于Python實(shí)用小知識(shí)之對(duì)象間比較的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 利用python對(duì)excel中一列的時(shí)間數(shù)據(jù)更改格式操作

    利用python對(duì)excel中一列的時(shí)間數(shù)據(jù)更改格式操作

    這篇文章主要介紹了利用python對(duì)excel中一列的時(shí)間數(shù)據(jù)更改格式操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • Python通過(guò)命令開(kāi)啟http.server服務(wù)器的方法

    Python通過(guò)命令開(kāi)啟http.server服務(wù)器的方法

    這篇文章主要給大家介紹了關(guān)于Python通過(guò)命令開(kāi)啟http.server服務(wù)器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 使用python實(shí)現(xiàn)下載我們想聽(tīng)的歌曲,速度超快

    使用python實(shí)現(xiàn)下載我們想聽(tīng)的歌曲,速度超快

    這篇文章主要介紹了使用python實(shí)現(xiàn)下載我們想聽(tīng)的歌曲,速度超快,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 詳解Python字典的操作

    詳解Python字典的操作

    在本文里小編給大家整理了關(guān)于Python字典的相關(guān)知識(shí)點(diǎn)以及操作方式,有興趣的朋友們學(xué)習(xí)下。
    2019-03-03
  • PyCharm出現(xiàn)Error:Python?packaging?tool?'setuptools'?not?found解決辦法

    PyCharm出現(xiàn)Error:Python?packaging?tool?'setuptools&apo

    這篇文章主要給大家介紹了關(guān)于PyCharm出現(xiàn)Error:Python?packaging?tool?'setuptools'?not?found的解決辦法,文中通過(guò)圖文及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Python實(shí)現(xiàn)自動(dòng)整理文件的示例代碼

    Python實(shí)現(xiàn)自動(dòng)整理文件的示例代碼

    在我們?nèi)粘I钪?,文件總是雜亂無(wú)章的,這個(gè)時(shí)候就需要我們整理一下。但是文件太多的話整理起來(lái)是非常麻煩的,因此我們今天就來(lái)用Python實(shí)現(xiàn)文件的自動(dòng)整理
    2022-08-08
  • 利用keras加載訓(xùn)練好的.H5文件,并實(shí)現(xiàn)預(yù)測(cè)圖片

    利用keras加載訓(xùn)練好的.H5文件,并實(shí)現(xiàn)預(yù)測(cè)圖片

    今天小編就為大家分享一篇利用keras加載訓(xùn)練好的.H5文件,并實(shí)現(xiàn)預(yù)測(cè)圖片,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 用python刪除文件夾中的重復(fù)圖片(圖片去重)

    用python刪除文件夾中的重復(fù)圖片(圖片去重)

    近期在整理相冊(cè)的時(shí)候,發(fā)現(xiàn)相冊(cè)中有許多重復(fù)圖片,人工一張張篩查刪除太枯燥,便寫(xiě)下這個(gè)python腳本,用于刪除文件夾下重復(fù)的圖片
    2021-05-05

最新評(píng)論

醴陵市| 牙克石市| 崇阳县| 融水| 昌平区| 肥西县| 神池县| 武威市| 衡水市| 张家口市| 博湖县| 汨罗市| 乐都县| 通道| 从化市| 萨嘎县| 朝阳县| 兰考县| 仁化县| 华安县| 名山县| 玉溪市| 晋宁县| 紫阳县| 视频| 北宁市| 合肥市| 阿拉尔市| 红桥区| 定州市| 孟津县| 兴业县| 长岛县| 汪清县| 新乡县| 长岭县| 西充县| 淮安市| 梁河县| 醴陵市| 秦皇岛市|