使用 python 3.6 和 Vmware WorkStation 构建一个小型虚拟局域网通讯程序
1、測試環境:
宿主機系統:win10、python 3.5
虛擬機系統:win7 64位、python 3.6、Vmware WorkStation 12
2、在【虛擬網絡編輯器】中不需要做任何改變,既不需要勾選【橋接模式】也不需要勾選【NAT模式】,也不需要設置【DHCP】,即可實現宿主機和虛擬機的局域網組建;
3、使宿主機作為服務端,代碼如下:
import socket s = socket.socket() s.bind(('192.168.136.1', 1234)) s.listen(5) while True:c,addr = s.accept()c.send(b'Thank you for connecting')c.close()注意:
1)s.accept() 返回一個元組 (c, addr),c是一個客戶端套接字,addr是一個地址,使用 c 發送數據和關閉 socket;
2)在 c.send 中使用前綴 b 將字符串轉換為byte類型
4、使虛擬機作為客戶端,代碼如下:
執行客戶端代碼后,獲取字符串?b'Thank you for connecting'
?
附:python 中的 socket 原理。在 python 中的大多數網絡編程都隱藏了socket模塊的基本細節,不直接和套接字交互。套接字包括兩個:服務端和客戶端。在創建一個服務端套接字后,讓它等待連接。這樣它就在某個網絡地址處(IP地址和一個端口號的組合)監聽,直到客戶端套接字連接。連接完成后,兩者就可以交互了。
處理客戶端套接字通常比處理服務器端套接字容易,因為服務端必須準備隨時處理客戶端的連接,同時還要處理多個連接,而客戶端只是簡單地連接,完成事務,斷開連接。(為了簡便,使用 socketServer 類族和 Twisted 框架來處理服務端編程)
一個套接字就是 socket 模塊中的socket類的一個實例。它的實例化需要3個參數:第1個參數是地址族(默認是socket.AF_INET);第2個參數是流(socket.SOCK_STREAM,默認值)或數據報(socket.SOCK_DGRAM)套接字;第3個參數是使用的協議(默認是0,使用默認值即可)。對于一個普通的套接字,不需要提供任何參數。
服務端套接字使用 bind 方法后,再調用 listen 方法去監聽某個特定地址。客戶端套接字使用 connect 方法連接到服務端,在 connect 方法中使用的地址與服務端在 bind 方法中的地址相同(在服務端,能實現很多功能,比如使用函數 socket.gethostname 得到當前主機名)。在這種情況下,一個地址就是一個格式為 (host, port) 的元組,其中 host 是主機名(比如 '192.168.136.1' ),port 是端口號(一個整數)。listen 方法就是一個參數,即服務端未處理的連接長度(即允許排隊等待的連接數目,這些連接在禁用之前等待)。
服務端套接字開始監聽后,它就可以接受客戶端的連接。這個步驟使用 accept 方法來完成。這個方法會阻塞(等待)直到客戶端連接,然后就返回一個格式為 (client, address) 的元組,client 是一個客戶端套接字, address 是一個地址。服務端在處理完與該客戶端的連接后,再次調用 accept 方法開始等待下一個連接。這個過程通常都是在一個無限循環中實現的。
套接字有兩個方法:send 和 recv ,用于傳輸和接收數據。可以使用字符串參數調用 send 以發送數據,用一個所需的最大字節數做參數調用 recv 來接收數據。如果不能確定使用哪個數字,那么 1024 是個很好的選擇。?
轉載于:https://www.cnblogs.com/swingingmace/p/8379994.html
總結
以上是生活随笔為你收集整理的使用 python 3.6 和 Vmware WorkStation 构建一个小型虚拟局域网通讯程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络流24题之魔术球问题
- 下一篇: sqlserver2008r2升级到20