溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

網(wǎng)絡(luò)編程之 Udp發(fā)送數(shù)據(jù)

發(fā)布時(shí)間:2020-07-06 03:58:48 來(lái)源:網(wǎng)絡(luò) 閱讀:267 作者:ckllf 欄目:編程語(yǔ)言

  demo:編寫(xiě)程序

  linux中寫(xiě)程序不一定用pycharm

  用pycharm或者vim或者sublime編輯器

  Sublime編輯時(shí):保存到一定次數(shù)是會(huì)提醒是否購(gòu)買(mǎi);右下角按鈕可以選擇語(yǔ)言;鼠標(biāo)移動(dòng)到上方會(huì)看到菜單欄,“首選項(xiàng)”中有配色方案-改完之后菜單欄如果不見(jiàn)了,重新開(kāi)一下;支持拖放文件夾到編輯器左側(cè);

  Sublime中

  Sublime中保存:CTRL+S

  按住Ctrl和加號(hào):放大字體

  **

  Udp發(fā)送數(shù)據(jù)

  1. 代碼大概結(jié)構(gòu)如下:

  import socket

  def main():

  #創(chuàng)建一個(gè)udp套接字

  udp_socket=socket.socket(socket.af_inet,socket.sock_dgram)

  #可以使用套接字收發(fā)數(shù)據(jù)

  #關(guān)閉套接字

  udp_socket.close()

  if__name__=”__main__”:

  main()

  寫(xiě)完程序后運(yùn)行,與pycharm中不同:

  打開(kāi)終端,cd到py文件所在的文件夾,vim 文件名.py python3 文件名.py

  如果用python2運(yùn)行,Python 文件名.py 現(xiàn)在都用python3

  

網(wǎng)絡(luò)編程之 Udp發(fā)送數(shù)據(jù)


  運(yùn)行測(cè)試完成后,接下來(lái)用vim打開(kāi)文件 用vim編輯:

  用sublime編輯的用 vim打開(kāi),縮進(jìn)的有點(diǎn)多,

  vim縮進(jìn)命令如下:

  ESC 進(jìn)入命令模式,大V, 上下鍵 選中一片, shift+< 向左縮進(jìn),向右縮進(jìn)shift+>

  因?yàn)槲募袥](méi)有任何顯示運(yùn)行的命令,所以終端中無(wú)法看到程序是否能正常運(yùn)行,回到文件,增加一個(gè)測(cè)試命令:print(——run——)

  小程序用終端和vim 大工程用pycharm

  2. 完成發(fā)送功能:

  在編輯模式下,敲完udp 然后Ctrl n會(huì)出現(xiàn)自動(dòng)補(bǔ)全,上下鍵選彈出的內(nèi)容,選中后回車(chē)

  import socket

  def main():

  #創(chuàng)建一個(gè)udp套接字

  udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

  #可以使用套接字收發(fā)數(shù)據(jù)

  #兩個(gè)參數(shù),第一個(gè)是內(nèi)容,第二個(gè)是一個(gè)元組(ip,port),

  #port是一個(gè)數(shù)字,不要用雙引號(hào),ip要用雙引號(hào)擴(kuò)起來(lái)。

  #udp_socket.sendto(“hahahah”,對(duì)方的ip和port)

  # 此時(shí),用這個(gè)電腦來(lái)發(fā)給另外一臺(tái)電腦來(lái)驗(yàn)證程序,

  # 比如自己的ubantu發(fā)給自己的windows,但是windows中需要有個(gè)程序來(lái)接收,

  #利用課程發(fā)的網(wǎng)絡(luò)調(diào)試助手用來(lái)接收數(shù)據(jù)。

  udp_socket.sendto(“hahahah”,(“192.168.33.53”,8080))

  #關(guān)閉套接字

  udp_socket.close()

  if__name__=”__main__”:

  main()

  然后在終端中python3 文件名.py運(yùn)行

  此時(shí)報(bào)錯(cuò)了,提示第9行是字符串“hahaha”,解決方案,前面加b,就不是字符串了b “hahaha”

  再次運(yùn)行時(shí)仍報(bào)錯(cuò),顯示網(wǎng)絡(luò)不錯(cuò),因?yàn)閣indows的ip是192.163.33.53,ubantu的ip是172.16.7.137,兩個(gè)ip前三個(gè)字段不同,不在同一個(gè)網(wǎng)絡(luò)里。

  此時(shí)在ubantu終端中輸入命令:ping 192.168.33.53,如果ping能通,說(shuō)明可以通信,否則不能通信。如果ping不成功,改成橋接。菜單欄中“虛擬機(jī)”-“設(shè)置”-“網(wǎng)絡(luò)適配器”-“自動(dòng)檢測(cè)”點(diǎn)終端上門(mén)的按鈕,選擇“橋接模式”,然后回到終端ifconfig

  如果網(wǎng)絡(luò)還不通,在ubantu終端輸入命令:sudo dhclient 等待分配IP 如果是橋接模式,一般分配的ip會(huì)與windows在同一個(gè)網(wǎng)絡(luò)號(hào)。再ping一下Windows的ip,如果出現(xiàn)消耗了多少時(shí)間,說(shuō)明此時(shí)可以通信了。

  如果測(cè)試中出現(xiàn)問(wèn)題,是因?yàn)殡娔X中裝了vmware,導(dǎo)致一臺(tái)電腦中有多個(gè)ip,此時(shí)將VMware的網(wǎng)絡(luò)斷開(kāi)就可以通信了。

  注意:udp_socket.sendto(b“hahahah”,(“192.168.33.53”,8080)) 中寫(xiě)ip時(shí),ip要寫(xiě)Windows的,不管Windows中的網(wǎng)絡(luò)調(diào)試助手中顯示的ip是多少,要通過(guò)Windows開(kāi)始中cmd命令,ipconfig出來(lái)的ip才是真正要接收數(shù)據(jù)的ip

  Ubantu終端中: Python3 :進(jìn)入交互模式 exit( )退出交互,用來(lái)驗(yàn)證某些知識(shí)點(diǎn) Python3

  文件名.py:運(yùn)行這個(gè)文件 ipython3也是交互模式,比python3高端,能自動(dòng)補(bǔ)全,支持清屏,ls,建議使用ipython3

  Ubantu終端中:復(fù)制文件命令,cp 01-socket的基本使用.py 02-發(fā)送任意數(shù)據(jù)給Windows中的調(diào)試助手.py

  意思就是把01文件復(fù)制一份,重命名為02

  3. 通過(guò)鍵盤(pán)獲取發(fā)送內(nèi)容來(lái)發(fā)送任意信息

  然后vim 02-XXXX打開(kāi)之后的程序與剛才一模一樣,代碼如下:

  import socket

  def main():

  #創(chuàng)建一個(gè)udp套接字

  udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

  #從鍵盤(pán)獲取數(shù)據(jù),就可以實(shí)現(xiàn)發(fā)送任意數(shù)據(jù)了,并用send_data變量存儲(chǔ),

  send_data = input(“請(qǐng)輸入你要發(fā)的信息:”)

  #可以使用套接字收發(fā)數(shù)據(jù),此處就不能在變量前加b了,把這句代碼變成注釋?zhuān)瑈y p復(fù)制這句代碼,重新編輯

  #udp_socket.sendto(b“hahahah”,(“192.168.33.53”,8080))

  #input獲取的東西是以字符串存儲(chǔ)的,不能直接把b“hahahah”換成send_data,用encode(“utf-8”)方法

  udp_socket.sendto(send_data.encode(“utf-8”),(“192.168.33.53”,8080))

  #關(guān)閉套接字

  udp_socket.close()

  if__name__=”__main__”:

  main()無(wú)錫婦科檢查醫(yī)院 http://www.87554006.com/

  **4. 循環(huán)發(fā)送數(shù)據(jù)

  以上代碼可以完成發(fā)送任意信息,但是如果想循環(huán)發(fā),需要while true,

  終端中: cp一份02文件,cp 02xx.py 03循環(huán)發(fā)送數(shù)據(jù).py vim 03…打開(kāi),ESC V 選中一段代碼,shift >

  整體向右縮進(jìn)

  保存并退出vim編輯器,按esc進(jìn)入命令模式后,輸入:wq,一定 要輸入冒號(hào)

  import socket

  def main():

  #創(chuàng)建一個(gè)udp套接字

  udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

  while true:

  #從鍵盤(pán)獲取數(shù)據(jù),就可以實(shí)現(xiàn)發(fā)送任意數(shù)據(jù)了,并用send_data變量存儲(chǔ),

  send_data = input(“請(qǐng)輸入你要發(fā)的信息:”)

  udp_socket.sendto(send_data.encode(“utf-8”),(“192.168.33.53”,8080))

  #關(guān)閉套接字

  udp_socket.close()

  if__name__=”__main__”:

  main()

  終端中:

  運(yùn)行程序進(jìn)行測(cè)試,如果要結(jié)束程序,ctrl c

  **5 帶有退出功能的循環(huán)發(fā)送

  cp 03 04帶有退出功能的循環(huán)發(fā)送.py

  import socket

  def main():

  #創(chuàng)建一個(gè)udp套接字

  udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

  while true:

  #從鍵盤(pán)獲取數(shù)據(jù),就可以實(shí)現(xiàn)發(fā)送任意數(shù)據(jù)了,并用send_data變量存儲(chǔ),

  send_data = input(“請(qǐng)輸入你要發(fā)的信息:”)

  #如果輸入的數(shù)據(jù)是exit,那就退出程序,break是直接退while,continue是退出這一次,后面的繼續(xù)執(zhí)行,然后再while true

  If send_data ==”exit”:

  break

  udp_socket.sendto(send_data.encode(“utf-8”),(“192.168.33.53”,8080))

  #關(guān)閉套接字

  udp_socket.close()

  if__name__=”__main__”:

  main()


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI