本地的程序間通訊(ipc)有很多種方式,但可以總結為下面4類:
不過這個不是重點!提問,在網路中程序之間如何通訊?
首要解決的問題是如何唯一標識乙個程序,否則通訊無從談起!在本地可以通過程序pid來唯一標識乙個程序,但是在網路中這是行不通的。其實tcp/ip協議族已經幫我們解決了這個問題,網路層的「ip位址」可以唯一標識網路中的主機,而傳輸層的「協議+埠」可以唯一標識主機中的應用程式(程序)。這樣利用三元組(ip位址,協議,埠)就可以標識網路的程序了,網路中的程序通訊就可以利用這個標誌與其它程序進行互動。
使用tcp/ip協議的應用程式通常採用應用程式設計介面:unix bsd的套接字(socket)和unix system v的tli(已經被淘汰),來實現網路程序之間的通訊。就目前而言,幾乎所有的應用程式都是採用socket,而現在又是網路時代,網路中程序通訊是無處不在,這就是我為什麼說「一切皆socket」。
所以,在下面的理解中,我們可以把socket 簡單的理解為「ip + 協議 + 埠」其中ip就是ip位址,協議就是tcp+udp,埠範圍是1-65535
需要說明的是socket和file有類似的地方,這是因為,在發展的初期他們都是按unix的思路創造出來的,「一切皆檔案」,所以對於socket也有 讀/寫io,開啟,關閉這樣的操作。
socket和file的區別:實現socket通常分成兩個部分
client
server
socket()
socket()
bind()
listen()
connect()
accept()
write()
read()
write()
read()
close()
close()
上:
知道了溝通過程,剩下就是語法,然後就可以開始進行socket的編寫了。
sk = socket.socket(socket.af_inet,socket.sock_stream,0)
引數一:位址簇socket.af_inet ipv4(預設)
socket.af_inet6 ipv6
socket.af_unix 只能夠用於單一的unix系統程序間通訊
引數二:型別
socket.sock_stream 流式socket , for tcp (預設)
socket.sock_dgram 資料報式socket , for udp
socket.sock_raw 原始套接字,普通的套接字無法處理icmp、igmp等網路報文,而sock_raw可以;其次,sock_raw也可以處理特殊的ipv4報文;此外,利用原始套接字,可以通過ip_hdrincl套接字選項由使用者構造ip頭。
socket.sock_rdm 是一種可靠的udp形式,即保證交付資料報但不保證順序。sock_ram用來提供對原始協議的低階訪問,在需要執行某些特殊操作時使用,如傳送icmp報文。sock_ram通常僅限於高階使用者或管理員執行的程式使用。
socket.sock_seqpacket 可靠的連續資料報服務
引數三:協議
#!/usr/bin/env python
#-- coding: utf-8 --
__author__ = '
echorep
'『』『
建立服務端
』『』import
socket
defmain():
#建立socket物件
sock =socket.socket(socket.af_inet, socket.sock_stream)
#監聽埠
sock.bind(('
127.0.0.1
',8001))
#開始監聽,
sock.listen(5)
while
true:
#阻塞,deng 。。。。
#直到有請求連線
'....
'connection, address =sock.accept()
#connection,代表客戶端socket物件,
#address,客戶端ip位址
#handle_request(connection)
buf = connection.recv(1024)
buf
#通過鏈結接受資料
建立客戶端
』『』import
socket
while
true:
objclient =socket.socket()
objclient.connect((
"localhost
",8001))
objclient.send(
"hihihi")
serverdate = objclient.recv(1024)
serverdate
objclient.close()
開課第八天
開課第八天,今天因為遲到問題被老師訓了,呵呵,說實話是真的感覺前一周有點懶散鬆懈,今天被訓之後又感覺到了緊迫感,嗯,堅持就是勝利,加油。上午講題,下午講新知識,以下就是本寶寶吸收的新養料 方法 可以被稱作函式,也可以被稱作功能。1 main 是我們學習的第乙個簡單的方法,public static ...
彙編第八天
彙編形式目標 main proc push ebp mov ebp,esp 建立堆疊框架 push offset msg 匯入引數位址 call printf 呼叫函式 xor eax,eax 返回0 pop epb 扯掉框架 ret 0 返回主程式 main endp 結束 1.條件語句 cmp ...
前端第八天
迴圈繫結的變數汙染 在進行事件迴圈變數繫結時,由於函式體內部 並未執行,在繫結結束後,呼叫函式時,賦予的部分變數失去意義,解決方案 給頁面元素新增乙個任意屬性 事件與已有的函式進行繫結 只需要將函式位址繫結給事件,事件繫結完成將會有系統在特定情況下自動觸發 物件 字典 的增刪改查 物件元素格式為字串...