愚公移山日記 20

2021-10-04 23:14:34 字數 2685 閱讀 4282

學習進度

我寫的日記倒不如說是筆記,今天的學習也算可以,敲了乙個udp聊天的例項,**不是很多,但是**的註解叫我很是費腦筋,敲了好多,唯恐描述不清楚,也並非有大胸懷去教會他人,只求在以後偶然翻看,自己能理解。

說明在我學習的這些課程均用到linux系統的終端,虛擬機器,由於本人能力有限制,並不能保證所有**均準確無誤,但也盡力將錯誤降至最低,如果博文能對您產生一點點幫助,那也是非常榮幸。

socket簡介(套接字)

兩個不同主機之間的程序進行通訊的埠,socket 是網路通訊的基本單元,網路資料的控制單元,網頁瀏覽,qq聊天等均使用socket

socket的建立步驟:

匯入模組

建立套接字

資料傳輸

關閉套接字

'''#匯入模組 socket

#建立乙個套接字,使用ip v4,使用udp方式

#資料的傳遞

#關閉套接字

'''#匯入模組 socket

import socket

#建立乙個套接字,使用ip v4,使用udp方式

#udp_socket = socket.socket(協議型別,傳輸方式)

#引數一:socket.af_inet 使用ipv4

#socket.af_inet6 使用ipv6

#引數二:scoket.sock_dgram使用upd 的傳輸方式(無連線)

#socket.sock_stream 使用tcp的傳輸方式(有鏈結)

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

#繫結傳送端的埠繫結

#upd_socket.bind(adress)

#address 是乙個元組,元組的第乙個元素是字串型別的ip位址,第二個元素 整數埠號

#ip位址可以省略 省略之後是自己的ip位址

#ip位址盡可能為空,好處是可以接受不同網絡卡的資訊

upd_socket.bind(

('ip位址'

,8888))

#繫結的必須是自己的位置('ip位址',8888),8888 是自定義

#資料的傳遞

#socket.sendto(要傳送的資料的二進位制格式,對方的ip位址和埠號)

#引數一:要傳送的資料二進位制格式

#字串轉換為二進位制格式 :字串.encode() 把字串轉化為二進位制

#引數二:對方發ip和埠號 address型別

udp_socket.sendto(

'字串'

.encode(),

('ip位址',8080))

#資料的接受(二級制)

#recvfeom(1024) 方法的作用:

#從套接字中接受1024個位元組的資料

#此方法會造成程式的阻塞,等待另一台計算機發來資料

#如果對方發資料了,recvfrom會自動解除阻塞

#如果對方沒有傳送,會一直等待

#接受到的資料是乙個元組,接受資料的二級制,傳送方的ip位址和埠號

recv_data = upd_socket.recvfrom(

1024

)#recv_data[0] 接受到的資料的二機制格式

#recv_data[1] 元組,對方的ip和埠

#解碼資料,得到字串

#errors = 'ignore' 出現錯誤後,如何處理 忽略錯誤資訊

#errors = 'strict' 嚴格模式,解碼錯誤

#decode(encoding = 'utf-8',errors = '')

recv_text = recv_data[0]

.decode(

'gbk'

)#輸出顯示接受的內容

print

('來自:'

,recv_data[0]

,'的訊息'

,recv_text)

decode(

) 解碼

#關閉套接字

udp_socket.close(

)

udp廣播

**如下:

#匯入模組

import socket

#建立套接字

socket.socket(socket.af_inet,socket.sock_dgram)

#設定廣播許可權(套接字預設不允許傳送廣播,需要開啟相關的許可權)

#socket.setsockopt(套接字,廣播屬性,屬性值)

#廣播位址 ***.***.***.255 或者 255.255.255.255

#socket.sol_socket 當前的套接字

#socket.so_broadcast 廣播屬性

udp_socket = socket.setsocket(socket.sol_socket,socket.so_broadcast,

true

)#傳送資料

#255.255.255.255也可以寫 當前區域性網路號下的主機

udp_socket.sendto(

'字串'

.encod(),

('255.255.255.255'

,8080))

#關閉套接字

upd_socket.close(

)

未完待續。。。。。。

愚公移山日記 11

學習進度 今天的學習內容確實有點少,主要是剛買到一本新書,一本很基礎的書,有一本新書,肯定是要看的呀,但是書本的內容實在是太基礎,但是又害怕直接跳過,會錯過寫什麼內容,畢竟python的內容實在是太豐富了。下面我來根據子所學的內容,和自己的實踐經驗來給各位分享一下吧。idle的使用介紹 氣泡排序法 ...

愚公移山日記 23

網域名稱 網域名稱解析系統,主要適用於將網域名稱轉換成對應的ip位址。瀏覽器訪問伺服器的過程 瀏覽器與伺服器建立連線時,是先去訪問dns伺服器,返回網域名稱相對應的ip位址,再去將得到的ip位址區連線相應的伺服器,由伺服器返回給我們資訊。當然在實際的訪問過程中,建立連線時,會先訪問本地dns,如果在...

愚公移山日記 26

學習進度 今天的主要學習成果是學習多程序,queue模組,佇列的基本用法如下 佇列是multiprocessing模組提供的乙個類 建立佇列 放值取值 import multiprocessing 建立佇列 佇列是multiprocessing模組提供的乙個類 multiprocessing.que...