Python-Socket網路編程

來源:互聯網
上載者:User

標籤:電腦   迴圈   直接   協議   測試流程   使用   encode   字元   監聽   

網路編程Socket介紹

  電腦之間相互傳遞資料的資料類型很多,比如視頻、圖片、檔案等等,但是在網路上各種類型的資料所支援的協議不同,網路上有很多種協議,例如http、smtp、dns、ftp、ssh、icmp等等,其實這些協議也是一些資料流的交換,只不過工作方式有所不同,無論他們如何變幻,都離不開資料的交換,資料的交換無非也就是發(send)和收(receive)兩個動作,但是這個發送和接收實現起來太複雜,所以就把這個底層的東西進行了封裝,這個封裝的產物就是socket,調用socket就是在調用TCP/IP。

 在寫代碼之前先聲明,TCP/IP不需要我們關心了,因為socket都進行了封裝,所以第一步要聲明socket(import socket),第二步聲明協議(socket.TCP/IP),第三步串連(connect(a.ip,a.port)),第四步發送資料(scoket.send(hello)),接收資料(recv()),關閉串連(socket.close())基於此虛擬碼步驟,可以實現一個簡單的發送端;接收端(服務端)的話,第一步聲明socket(import socket),第二步聲明協議(socket.TCP/IP),第三步監聽連接埠(socket.listen(ip,port)),第四步等待資料(waiting),第五步收資料(recv()),最後還可以發資料(send())。

 

 寫一個試試吧!!!

用戶端代碼


服務端代碼

測試流程:先開啟服務端,再開啟用戶端。現在只能發送和接收一條資料。


 剛才傳送的是英文字元,那要是傳送中文字元是什麼效果呢?

用戶端代碼

服務端代碼

測試:


這個報錯得通過encode和decode來解決,我這裡服務端沒做修改,只更改了用戶端代碼,改完之後再進行測試沒有報錯,成功發送返回漢字


上面的代碼只能接受和發送一次資料,那麼要想實現多次的發送和接收呢?

用戶端代碼


服務端代碼

現在使用單用戶端串連並連續發送資料沒有問題,那麼嘗試著斷開用戶端試試有啥效果?答案是服務端進入了一個死迴圈,此處不再,為什麼呢?因為用戶端斷開後,服務端還在revc(1024)去接收資料,一直接收不到資料,所以就進入了一個死迴圈。那解決方案就是加一個判斷語句試一下。

服務端代碼


問題又來了?我們想要的效果是用戶端A斷開後,服務端就接著串連用戶端B了,那現在服務端都斷開了,還怎麼繼續? 應該讓伺服器端持續的保持接收用戶端的串連,所以還要修改服務端的代碼。還需要加一個while迴圈。

現在首先開啟服務端程式,再開啟兩個用戶端程式,把其中的一個用戶端斷開後,看結果。會探索服務端串連了第二個用戶端。


再來測試

what????發空就直接卡住了。。。因為不能send空,要修改用戶端代碼,加一個判斷

Python-Socket網路編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.