乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python進階記錄之網(wǎng)絡編程(五)

       豆寶有蟲吃 2019-07-12

      回顧

      在Python進階記錄之網(wǎng)絡編程(四)中,我們介紹了TCP協(xié)議的基本概念以及使用Python創(chuàng)建簡單的TCP客戶端與TCP服務端程序。今天我們講一下如何利用TCP server和TCP client實現(xiàn)簡單的點對點聊天。

      創(chuàng)建TCP server程序

      我們使用socket模塊的socket( )方法創(chuàng)建一個socket對象,由于是基于TCP協(xié)議的,所以我們傳入類型Type為SOCK_STREAM。無論是UDP協(xié)議還是TCP協(xié)議,相應的服務端的端口都必須是唯一的,因此我們通過調(diào)用socket對象的bind( )方法來指定服務端的端口號,同時指定IP地址為127.0.0.1。

      TCP server代碼

      通過上一節(jié)的內(nèi)容,我們知道,TCP server代碼與UDP server代碼非常相似,不同的是,因為TCP協(xié)議是面向連接的,所以我們需要使用listen( )方法進行監(jiān)聽,并使用accept( )方法來獲取連接的客戶端套接字和地址信息。為了可以一直收發(fā)消息,我們使用while循環(huán)。這里我們?nèi)匀恢付ǚ斩耸紫冉邮湛蛻舳说南?,因此,我們需要首先接收?shù)據(jù)。

      在基于UDP協(xié)議的UDP服務端程序中,我們直接使用服務端套接字的recvfrom( )方法和sendto( )方法來進行消息的接收與發(fā)送,但是在基于TCP協(xié)議的服務端程序中,我們一般利用accept( )方法獲取的客戶端套接字來進行消息的接收與發(fā)送。recv( )方法獲取消息,send( )方法發(fā)送消息。為了使程序能夠正常終止,我們規(guī)定,當接收到“88”的信息時,服務端程序終止。

      創(chuàng)建TCP client程序

      創(chuàng)建TCP client程序比服務端程序要簡單一點,我們?nèi)匀皇褂胹ocket模塊的socket( )方法創(chuàng)建一個socket對象,Type設置為SOCK_STREAM。由于要實現(xiàn)與我們剛剛創(chuàng)建的TCP服務端通信,因此設置要發(fā)送的地址需要指定與剛剛創(chuàng)建的TCP服務端綁定的地址信息保持一致,IP為“127.0.0.1”,端口號為“6666”,然后使用connect( )方法進行與指定服務端的連接。

      TCP client代碼

      同樣地,我們使用while循環(huán)來保證TCP client程序可以一直收發(fā)消息。前面提到,我們指定服務端首先接收客戶端的消息,所以客戶端就需要首先發(fā)送消息。當發(fā)送的消息為“88”時,客戶端程序終止,同時服務端接收到“88”消息后也終止,保證了兩個程序的正常終止。

      運行程序

      我們之前使用UDP協(xié)議實現(xiàn)點對點聊天時,由于UDP協(xié)議是一種無連接的傳輸層協(xié)議,因此無論先運行服務端程序,還是先運行客戶端程序,都是可以正常進行通信的。但是TCP協(xié)議是面向連接的,所以必須首先運行TCP server程序,啟動服務端后,再運行TCP client程序。如果先運行TCP client,connect( )方法會由于找不到指定的服務而連接失敗。

      當TCP server和TCP client按順序成功運行后,兩者之間就可以進行通信了。我們的程序中指定由客戶端首先發(fā)送消息,服務端接收消息后繼續(xù)發(fā)送消息,直至客戶端發(fā)送消息“88”后兩個程序終止,程序運行結(jié)束。

      TCP server運行結(jié)果如下所示。

      TCP server運行結(jié)果

      TCP client運行結(jié)果如下所示。

      TCP client運行結(jié)果

      至此,我們使用一個TCP server和一個TCP client實現(xiàn)了簡單的點對點聊天。與之前基于UDP協(xié)議實現(xiàn)的點對點聊天一樣,當前的聊天模式只能發(fā)一句收一句,這是因為我們當前的程序都是單線程阻塞的??梢岳梦覀冎敖榻B過的多進程和多線程內(nèi)容,將發(fā)消息和收消息分別使用一個進程來保證收發(fā)消息互不影響。后續(xù)我們會介紹多進程和多線程的TCP服務端,到時候我們再來實現(xiàn)收發(fā)消息互不影響的點對點聊天。

      總結(jié)

      以上內(nèi)容介紹了如何利用TCP服務端和客戶端實現(xiàn)一個簡單的點對點聊天,需要重點掌握基于TCP協(xié)議的服務端與客戶端寫法,區(qū)別基于UDP協(xié)議的服務端和客戶端。感謝大家的支持與關注,歡迎一起學習交流~

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多