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

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)文章

  • Python字符串處理實(shí)現(xiàn)單詞反轉(zhuǎn)

    Python字符串處理實(shí)現(xiàn)單詞反轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了Python字符串處理實(shí)現(xiàn)單詞反轉(zhuǎn)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Python中字符串的格式化方法小結(jié)

    Python中字符串的格式化方法小結(jié)

    這篇文章主要介紹了Python中字符串的格式化方法小結(jié),提到了針對(duì)Python2.x與3.x版本相異情況下的不同技巧,需要的朋友可以參考下
    2016-05-05
  • 有關(guān)Tensorflow梯度下降常用的優(yōu)化方法分享

    有關(guān)Tensorflow梯度下降常用的優(yōu)化方法分享

    今天小編就為大家分享一篇有關(guān)Tensorflow梯度下降常用的優(yōu)化方法分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python 批量操作設(shè)備的實(shí)現(xiàn)步驟

    Python 批量操作設(shè)備的實(shí)現(xiàn)步驟

    本文將結(jié)合實(shí)例代碼,介紹Python 批量操作設(shè)備的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Django框架封裝外部函數(shù)示例

    Django框架封裝外部函數(shù)示例

    這篇文章主要介紹了Django框架封裝外部函數(shù),結(jié)合Django框架表單登陸功能示例分析了封裝外部函數(shù)的相關(guān)操作步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-05-05
  • PyTorch實(shí)現(xiàn)ResNet50、ResNet101和ResNet152示例

    PyTorch實(shí)現(xiàn)ResNet50、ResNet101和ResNet152示例

    今天小編就為大家分享一篇PyTorch實(shí)現(xiàn)ResNet50、ResNet101和ResNet152示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python 中如何使用 setLevel() 設(shè)置日志級(jí)別

    Python 中如何使用 setLevel() 設(shè)置日志級(jí)別

    這篇文章主要介紹了在 Python 中使用setLevel() 設(shè)置日志級(jí)別,Python 提供了一個(gè)單獨(dú)的日志記錄模塊作為其標(biāo)準(zhǔn)庫(kù)的一部分,以簡(jiǎn)化日志記錄,本文將討論日志記錄 setLevel 及其在 Python 中的工作方式,需要的朋友可以參考下
    2023-07-07
  • python排列組合庫(kù)itertools的具體使用

    python排列組合庫(kù)itertools的具體使用

    排列組合是數(shù)學(xué)中必不可少的一部分, Python 提供了itertools庫(kù),該庫(kù)具有計(jì)算排列和組合的內(nèi)置函數(shù),本文主要介紹了python排列組合庫(kù)itertools的具體使用,具有一定的參考價(jià)值,感興趣的可以了解下
    2024-01-01
  • python類繼承與子類實(shí)例初始化用法分析

    python類繼承與子類實(shí)例初始化用法分析

    這篇文章主要介紹了python類繼承與子類實(shí)例初始化用法,實(shí)例分析了Python類的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Python+OpenCV 圖像邊緣檢測(cè)四種實(shí)現(xiàn)方法

    Python+OpenCV 圖像邊緣檢測(cè)四種實(shí)現(xiàn)方法

    本文主要介紹了通過(guò)OpenCV中Sobel算子、Schaar算子、Laplacian算子以及Canny分別實(shí)現(xiàn)圖像邊緣檢測(cè)并總結(jié)了四者的優(yōu)缺點(diǎn),感興趣的同學(xué)可以參考一下
    2021-11-11

最新評(píng)論