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

有個需求,就是在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

相關文章
相關標籤/搜索