有個需求,就是在windows上看見一篇介紹linux相關的文章,想在局域網內的另一臺linux電腦上嘗試一下,python
因而就須要把該網頁連接發送給linux,不想一點一點敲連接,又苦於沒有找到其它好的方法。linux
想起以前學習計算機網絡時瞭解到的socket,因而再次打開課本,代碼(python3)以下:windows
客戶端(windows)代碼:服務器
# 局域網內的windows客戶端 from socket import * #導入socket裏的全部東西 serverName = '127.0.0.1' #換成局域網內服務器端IP便可實現局域網內通訊 serverPort = 12001 #服務器端口,除了已知的被佔用端口均可,通常建議10000-65535 clientSocket = socket(AF_INET,SOCK_DGRAM) #UDP鏈接 #ipv4 udp while True: message = input('please input: \n') if (message == '0'): #輸入0時結束髮送 break clientSocket.sendto(message.encode(),(serverName,serverPort)) #向服務器發送消息,使用socket時,只能以字節形式傳送,故須要encode() reply,serverAddress = clientSocket.recvfrom(2048) #接收服務器返回的消息和地址 print (reply) clientSocket.close() #關閉鏈接
服務器端(linux)代碼:網絡
# 若是是局域網內的linux做爲服務器端執行該代碼,注意先關閉防火牆 from socket import * serverPort = 12001 serverSocket = socket(AF_INET,SOCK_DGRAM) serverSocket.bind(('',serverPort)) #注意bind方法括號內爲一個元組,引號默認表示爲127.0.0.1,即監聽本地端口 print('ready') while True: message,clientAddress = serverSocket.recvfrom(2048) #接收客戶端發來的消息 print(message) serverSocket.sendto('have received'.encode(),clientAddress) #使用socket時,只能以字節形式傳送,故須要encode()
上述代碼參考《計算機網絡自頂向下方法》,代碼很簡潔,並且基本上能知足需求。socket
值得強調的一點是,在實現上述代碼時,建議先在本機(即在windows上跑上面兩個腳本),成功了之後再把serverName從'127.0.0.1' 變爲 '局域網內服務器端IP'。學習
並且在linux端實現服務器端代碼時,必定要先關閉防火牆!凡是涉及到局域網內linux與其它主機通訊的都要考慮防火牆的問題,好比ftp之類!(這一點對於小白來說怎樣強調都不爲過,雖然我以前知道也這一點,可是此次在運行該代碼時,再次犯了這樣的錯誤,找緣由也浪費了挺長時間,最後想起是防火牆的緣由又懊惱不已,懷着悲傷的心情寫下了這個小結)spa