局域網(wǎng)內(nèi)python socket實(shí)現(xiàn)windows與linux間的消息傳送
有個(gè)需求,就是在windows上看見(jiàn)一篇介紹linux相關(guān)的文章,想在局域網(wǎng)內(nèi)的另外一臺(tái)linux電腦上嘗試一下,
于是就需要把該網(wǎng)頁(yè)鏈接發(fā)送給linux,不想一點(diǎn)一點(diǎn)敲鏈接,又苦于沒(méi)有找到其它好的方法。
想起之前學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)時(shí)了解到的socket,于是再次打開(kāi)課本,代碼(python3)如下:
客戶端(windows)代碼:
# 局域網(wǎng)內(nèi)的windows客戶端
from socket import * #導(dǎo)入socket里的所有東西
serverName = '127.0.0.1' #換成局域網(wǎng)內(nèi)服務(wù)器端IP即可實(shí)現(xiàn)局域網(wǎng)內(nèi)通信
serverPort = 12001 #服務(wù)器端口,除了已知的被占用端口都可,一般建議10000-65535
clientSocket = socket(AF_INET,SOCK_DGRAM) #UDP連接
#ipv4 udp
while True:
message = input('please input: \n')
if (message == '0'): #輸入0時(shí)結(jié)束發(fā)送
break
clientSocket.sendto(message.encode(),(serverName,serverPort)) #向服務(wù)器發(fā)送消息,使用socket時(shí),只能以字節(jié)形式傳送,故需要encode()
reply,serverAddress = clientSocket.recvfrom(2048) #接收服務(wù)器返回的消息和地址
print (reply)
clientSocket.close() #關(guān)閉連接
服務(wù)器端(linux)代碼:
# 如果是局域網(wǎng)內(nèi)的linux作為服務(wù)器端執(zhí)行該代碼,注意先關(guān)閉防火墻
from socket import *
serverPort = 12001
serverSocket = socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(('',serverPort)) #注意bind方法括號(hào)內(nèi)為一個(gè)元組,引號(hào)默認(rèn)表示為127.0.0.1,即監(jiān)聽(tīng)本地端口
print('ready')
while True:
message,clientAddress = serverSocket.recvfrom(2048) #接收客戶端發(fā)來(lái)的消息
print(message)
serverSocket.sendto('have received'.encode(),clientAddress) #使用socket時(shí),只能以字節(jié)形式傳送,故需要encode()
上述代碼參考《計(jì)算機(jī)網(wǎng)絡(luò)自頂向下方法》,代碼很簡(jiǎn)潔,而且基本上能滿足需求。
值得強(qiáng)調(diào)的一點(diǎn)是,在實(shí)現(xiàn)上述代碼時(shí),建議先在本機(jī)(即在windows上跑上面兩個(gè)腳本),成功了以后再把serverName從'127.0.0.1' 變?yōu)?'局域網(wǎng)內(nèi)服務(wù)器端IP'。
而且在linux端實(shí)現(xiàn)服務(wù)器端代碼時(shí),一定要先關(guān)閉防火墻!凡是涉及到局域網(wǎng)內(nèi)linux與其它主機(jī)通信的都要考慮防火墻的問(wèn)題,比如ftp之類!(這一點(diǎn)對(duì)于小白來(lái)講怎樣強(qiáng)調(diào)都不為過(guò),雖然我之前知道也這一點(diǎn),但是這次在運(yùn)行該代碼時(shí),再次犯了這樣的錯(cuò)誤,找原因也浪費(fèi)了挺長(zhǎng)時(shí)間,最后想起是防火墻的原因又懊惱不已,懷著悲傷的心情寫(xiě)下了這個(gè)小結(jié))
總結(jié)
以上所述是小編給大家介紹的局域網(wǎng)內(nèi)python socket實(shí)現(xiàn)windows與linux間的消息傳送,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- C/C++?Linux?Socket網(wǎng)絡(luò)編程流程分析
- 詳解從Linux源碼看Socket(TCP)的bind
- 詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控
- 從Linux源碼看Socket(TCP)Client端的Connect的示例詳解
- Linux進(jìn)程間通信方式之socket使用實(shí)例
- linux下socket編程常用頭文件(推薦)
- linux socket通訊獲取本地的源端口號(hào)的實(shí)現(xiàn)方法
- Linux UDP socket 設(shè)置為的非阻塞模式與阻塞模式區(qū)別
- Linux?socket函數(shù)詳解
相關(guān)文章
Python中.py程序在CMD控制臺(tái)以指定虛擬環(huán)境運(yùn)行
本文主要介紹了Python中.py程序在CMD控制臺(tái)以指定虛擬環(huán)境運(yùn)行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
關(guān)于dataframe.query()篩選tips
在Pandas中,通過(guò)布爾索引或.query()方法可以實(shí)現(xiàn)對(duì)DataFrame中數(shù)據(jù)的篩選。例如,篩選特定列符合條件的行數(shù)據(jù)或排除某些類型值。此外,.query()方法還支持使用外部變量進(jìn)行篩選。這些操作對(duì)數(shù)據(jù)處理非常有用,可以高效地進(jìn)行數(shù)據(jù)清洗和預(yù)處理2024-09-09
WxPython開(kāi)發(fā)之實(shí)現(xiàn)表格數(shù)據(jù)導(dǎo)出到Excel并打開(kāi)
在 Python 中使用 wxPython 導(dǎo)出實(shí)體類列表數(shù)據(jù)到 Excel,通常可以借助 openpyxl 或 pandas 庫(kù)來(lái)實(shí)現(xiàn),下面就跟隨小編一起來(lái)了解下具體操作吧2024-12-12
Python基礎(chǔ)學(xué)習(xí)之條件控制語(yǔ)句小結(jié)
如果我需要設(shè)置一個(gè)死循環(huán),然后靠條件來(lái)終止,怎么辦?一個(gè)很簡(jiǎn)單的問(wèn)題,但是我卻沒(méi)有說(shuō),這一篇本應(yīng)該在分支控制語(yǔ)句里面的,現(xiàn)在只能拿出來(lái)水文再寫(xiě)一篇了,需要的朋友可以參考下2021-05-05
pytorch cuda上tensor的定義 以及減少cpu的操作詳解
這篇文章主要介紹了pytorch cuda上tensor的定義 以及減少cpu的操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
使用python庫(kù)xlsxwriter庫(kù)來(lái)輸出各種xlsx文件的示例
這篇文章主要介紹了使用python庫(kù)xlsxwriter庫(kù)來(lái)輸出各種xlsx文件的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

