網路程式設計之socket

2021-10-01 22:37:04 字數 1778 閱讀 8465

套接字(socket)是乙個抽象層,應用程式可以通過它傳送或接收資料,可對其進行像對檔案一樣的開啟、讀寫和關閉等操作。套接字允許應用程式將i/o插入到網路中,並與網路中的其他應用程式進行通訊。網路套接字是ip位址與埠的組合。

套接字起源於 20 世紀 70 年代加利福尼亞大學伯克利分校版本的 unix,有時人們也把套接字稱為「伯克利套接字」或「bsd 套接字」。一開始,套接字被設計用在同一臺主機上多個應用程式之間的通訊。這也被稱程序間通訊,或 ipc。套接字有兩種(或者稱為有兩個種族),分別是基於檔案型的和基於網路型的。

1、基於檔案型套接字家族的名字:af_unixunix一切皆檔案,基於檔案的套接字呼叫的就是底層的檔案系統來取資料,兩個套接字程序執行在同一機器,可以通過訪問同乙個檔案系統間接完成通訊

2、基於網路型套接字家族的名字:af_inet(還有af_inet6被用於ipv6,還有一些其他的位址家族,不過,他們要麼是只用於某個平台,要麼就是已經被廢棄,或者是很少被使用,或者是根本沒有實現,所有位址家族中,af_inet是使用最廣泛的乙個,python支援很多種位址家族,但是由於我們只關心網路程式設計,所以大部分時候我麼只使用af_inet)

socket.socket(family=af_inet,type=sock_stream)

family位址系列應為af_inet(預設值),af_inet6,af_unix,af_can或af_rds,(af_unix 域實際上是使用本地 socket 檔案來通訊)

type套接字型別應為sock_stream(預設值),sock_dgram,sock_raw或其他sock_常量之一。sock_stream 是基於tcp的,有保障的(即能保證資料正確傳送到對方)面向連線的socket,多用於資料傳送。 sock_dgram 是基於udp的,無保障的面向訊息的socket,多用於在網路上發廣播資訊。

import socket

udp_sk = socket.socket(

type

= socket.sock_dgram)

udp_sk.bind(

"127.0.0.1"

,9999

)while

true

: msg,addr = udp_sk.recvfrom(

1024

)print

(msg.decode(

"utf-8"))

info =

input

(">>>"

).encode(

"utf-8"

) udp_sk.sendto(info,addr)

udp_sk.close(

)"""客戶端"""

import socket

udp_sk = socket.socket(

type

= socket.sock_dgram)

ip_port =

("127.0.0.1"

,9999

)while

true

: msg =

input

(">>>>>"

) udp_sk.sendto(msg.encode(

"utf-8"

),ip_port)

ret,addr = udp_sk.recvfrom(

1024

)print

("伺服器》"

,ret.decode(

"utf-8"))

udp_sk.close(

)

網路程式設計之socket

1,socket 通訊 服務端 import socket server socket.socket server.bind 127.0.0.1,8080 server.listen 5 conn,addr server.accept data conn.recv 1024 print data c...

網路程式設計之socket

1 是什麼?socket又稱套接字,是能夠實現程序間通訊的乙個 東西 2 為什麼?socket是對tcp ip協議的乙個封裝,相當於軟體設計模式中的外觀者模式 socket作為按鈕,按鈕內部連線著tcp ip的若干個對應的協議,也其實可以簡單理解為socket內部封裝著與tcp ip參考模型中各層進...

網路程式設計之Socket程式設計

對 tcp ip udp socket 程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission co...