亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python 的 Socket 編程

 更新時間:2015年03月24日 16:14:47   投稿:hebedich  
這篇文章最初發(fā)布的時候標題是“Python的WebSocket編程”,坦白來說有點文不對題。我們在這里打算討論的僅僅是常規(guī)的socket編程。盡管 Web Socket 和常規(guī)sockets有點很相似,但又不是同一個東西。那我還是希望這篇文章對你們有點幫助。

Socket是網(wǎng)絡應用的基礎(chǔ)。而Python使得網(wǎng)絡socket編程入門變得超級簡單。在這篇簡介里面我們將創(chuàng)建一個簡單服務器,用于接受和相應客戶端程序的請求。
由于本人最近對 Linux Containers 有點癡迷,因此我們也將在服務器中實現(xiàn)2個容器。同時在容器中我們在幾秒鐘內(nèi)就能創(chuàng)建其他一些主機,這就能非常簡單的模擬出一個網(wǎng)絡。

創(chuàng)建容器

我使用的是Ubuntu14.04. 然后用root用戶運行下面的命令就可以創(chuàng)建好2個容器了。

復制代碼 代碼如下:

lxc-create -t download -n pyServer
# Choose ubuntu, trusty, amd64 when prompted
# Then clone the first container
lxc-clone -o pyServer -n pyClient

啟動服務器

現(xiàn)在我們創(chuàng)建好了容器,先進入到服務器容器中并啟動我們的服務器程序。用root權(quán)限運行下面這條命令就可以啟動容器了:lxc-start -n pyServer -d, 這將啟動容器作為我們的守護進程。讓我們先重新連接進入這個容器。這里我喜歡使用screen,這樣我可以很方便的進出到容器中。先創(chuàng)建screen會話:  screen -dRR pyServer,需要重新連接到容器中的話,可以用命令:lxc-attach -n pyServer
當我們進入到容器中后,我們需要安裝python并啟動服務器。

復制代碼 代碼如下:

apt-get install python
vim pyServer.py

打開vim(或你個人偏好的文本編輯器),敲入以下python代碼。

復制代碼 代碼如下:

from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print "The server is ready to rock and roll!"
while 1:
    name, clientAddress = serverSocket.recvfrom(2048)
    response = "Hello " + str(name) + "! You are really good at socket programming"
    serverSocket.sendto(response, clientAddress)

這段代碼很直觀。我們創(chuàng)建了一個serverSocket監(jiān)聽12000端口。當接收到請求的時候(包含用戶名)就會回復一條信息。啟動服務器的命令是 python pyServer.py 如果一切正常的話,你應該可以看到這樣一條信息 This server is ready to rock and roll! 用Ctrl+a 和Ctrl+d退出容器(還有screen會話)

啟動客戶端

現(xiàn)在服務器端已經(jīng)準備就緒,改讓客戶端跑起來了。在開始前先查一下服務器容器的IP地址,我們馬上就會用到。你可以用這個命令得到IP:lxc-ls --fancy 。用一個screen會話進入到客戶端的容器,和前面步驟一樣安裝好python。

復制代碼 代碼如下:

lxc-start -n pyClient -d
screen -dRR pyClient
lxc-attach -n pyClient
apt-get install python
vim pyClient.py

在vim里面敲入以下代碼創(chuàng)建一個pyClient.py文件。

復制代碼 代碼如下:

from socket import *
# Replace the IP address in serverName with the IP of your container that you      grabbed previously.
serverName = '10.0.3.211'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
name = raw_input('Please enter your name:')
clientSocket.sendto(name, (serverName, serverPort))
response, serverAddress = clientSocket.recvfrom(2048)
print response
clientSocket.close()

這段代碼也很直觀。要求用戶輸入用戶名,然后發(fā)送到服務器,最后打印出服務器響應信息。
現(xiàn)在你可以自己來了!保存文件,然后執(zhí)行python程序 python pyClient.py .在你輸入你的名字并按下回車后,就應該可以收到一條來自服務器的響應信息。
這是一個非常簡單的例子,但我們很容易就發(fā)現(xiàn),可以在這些基礎(chǔ)的代碼上面做一些拓展就可以實現(xiàn)很多更有趣也更復雜的應用。我們還可以利用LXC強大的功能但簡便的操作模擬出一個更大的網(wǎng)絡從而實現(xiàn)一個分布式應用。

以上所述就是本文的全部內(nèi)容了,希望對大家學習python能夠有所幫助。

請您花一點時間將文章分享給您的朋友或者留下評論。我們將會由衷感謝您的支持!

相關(guān)文章

  • 基于Python的接口測試框架實例

    基于Python的接口測試框架實例

    下面小編就為大家?guī)硪黄赑ython的接口測試框架實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Python的gevent框架的入門教程

    Python的gevent框架的入門教程

    這篇文章主要介紹了Python的gevent框架的入門教程,示例代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • Python Xml文件添加字節(jié)屬性的方法

    Python Xml文件添加字節(jié)屬性的方法

    下面小編就為大家分享一篇Python Xml文件添加字節(jié)屬性的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 關(guān)于pip安裝opencv-python遇到的問題

    關(guān)于pip安裝opencv-python遇到的問題

    這篇文章主要介紹了關(guān)于pip安裝opencv-python遇到的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python庫h5py入門詳解

    python庫h5py入門詳解

    本文只是簡單的對h5py庫的基本創(chuàng)建文件,數(shù)據(jù)集和讀取數(shù)據(jù)的方式進行介紹,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 使用Python Tkinter實現(xiàn)剪刀石頭布小游戲功能

    使用Python Tkinter實現(xiàn)剪刀石頭布小游戲功能

    這篇文章主要介紹了使用Python Tkinter實現(xiàn)剪刀石頭布小游戲功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • PyCharm利用pydevd-pycharm實現(xiàn)Python遠程調(diào)試的詳細過程

    PyCharm利用pydevd-pycharm實現(xiàn)Python遠程調(diào)試的詳細過程

    這篇文章主要介紹了PyCharm利用pydevd-pycharm實現(xiàn)Python遠程調(diào)試,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • 跟老齊學Python之眼花繚亂的運算符

    跟老齊學Python之眼花繚亂的運算符

    在python里,可能大家已從運算表里找到了,即 (“+”),但是與PHP不同的是兩個對象相加,兩個對象必須是同類型的,不同類型的兩個對象是不能相加的.要實現(xiàn)像上面PHP代碼里的運算,必須保證兩對象類型一致。
    2014-09-09
  • Python數(shù)據(jù)類型轉(zhuǎn)換實現(xiàn)方法

    Python數(shù)據(jù)類型轉(zhuǎn)換實現(xiàn)方法

    這篇文章主要介紹了Python數(shù)據(jù)類型轉(zhuǎn)換的實現(xiàn),有時候,我們需要對數(shù)據(jù)內(nèi)置的類型進行轉(zhuǎn)換,數(shù)據(jù)類型的轉(zhuǎn)換,一般情況下你只需要將數(shù)據(jù)類型作為函數(shù)名即可
    2022-12-12
  • Jupyter notebook運行Spark+Scala教程

    Jupyter notebook運行Spark+Scala教程

    這篇文章主要介紹了Jupyter notebook運行Spark+Scala教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評論