溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

局域網內python socket實現windows與linux間的消息傳送

發(fā)布時間:2020-09-16 04:32:14 來源:腳本之家 閱讀:272 作者:小friend 欄目:開發(fā)技術

有個需求,就是在windows上看見一篇介紹linux相關的文章,想在局域網內的另外一臺linux電腦上嘗試一下,

于是就需要把該網頁鏈接發(fā)送給linux,不想一點一點敲鏈接,又苦于沒有找到其它好的方法。

想起之前學習計算機網絡時了解到的socket,于是再次打開課本,代碼(python3)如下:

客戶端(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時結束發(fā)送
  break
 clientSocket.sendto(message.encode(),(serverName,serverPort)) #向服務器發(fā)送消息,使用socket時,只能以字節(jié)形式傳送,故需要encode()
 reply,serverAddress = clientSocket.recvfrom(2048)    #接收服務器返回的消息和地址
 print (reply)
clientSocket.close()  #關閉連接

服務器端(linux)代碼:

# 如果是局域網內的linux作為服務器端執(zhí)行該代碼,注意先關閉防火墻
from socket import *
serverPort = 12001
serverSocket = socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(('',serverPort)) #注意bind方法括號內為一個元組,引號默認表示為127.0.0.1,即監(jiān)聽本地端口
print('ready')
while True:
 message,clientAddress = serverSocket.recvfrom(2048)  #接收客戶端發(fā)來的消息
 print(message)

    serverSocket.sendto('have received'.encode(),clientAddress)        #使用socket時,只能以字節(jié)形式傳送,故需要encode()

上述代碼參考《計算機網絡自頂向下方法》,代碼很簡潔,而且基本上能滿足需求。

值得強調的一點是,在實現上述代碼時,建議先在本機(即在windows上跑上面兩個腳本),成功了以后再把serverName從'127.0.0.1' 變?yōu)?'局域網內服務器端IP'。

而且在linux端實現服務器端代碼時,一定要先關閉防火墻!凡是涉及到局域網內linux與其它主機通信的都要考慮防火墻的問題,比如ftp之類?。ㄟ@一點對于小白來講怎樣強調都不為過,雖然我之前知道也這一點,但是這次在運行該代碼時,再次犯了這樣的錯誤,找原因也浪費了挺長時間,最后想起是防火墻的原因又懊惱不已,懷著悲傷的心情寫下了這個小結)

總結

以上所述是小編給大家介紹的局域網內python socket實現windows與linux間的消息傳送,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI