socket 通訊例項
socket介面是作業系統提供的,呼叫作業系統的介面。當然高階語言一般也封裝了好用的函式介面,下面用python**寫乙個簡單的socket服務端例子:
server.py
import socket
host = 'localhost' # 伺服器主機位址
port = 5000 # 伺服器監聽埠
buffer_size = 2048 # 讀取資料大小
# 建立乙個套接字
sock = socket.socket(socket.af_inet, socket.sock_stream)
# 繫結主機和埠
sock.bind((host, port))
# 開啟socket監聽
sock.listen(5)
print 'server start, listening {}'.format(port)
while true:
# 建立連線,連線為建立的時候阻塞
conn, addr = sock.accept()
while true:
# 讀取資料,資料還沒到來阻塞
data = conn.recv(buffer_size)
if len(data):
print 'server recv data: {}'.format(data)
conn.send(data)
print 'server send data: {}'.format(data)
else:
print 'server recv over'
break
conn.close()
sock.close()
client.py
import socket
host = 'localhost'
port = 5000
buffer_size = 1024
# 建立客戶端套接字
sock = socket.socket(socket.af_inet, socket.sock_stream)
# 連線到伺服器
sock.connect((host, port))
try:
message = "hello"
# 發起資料給伺服器
sock.sendall(message)
amount_received = 0
amount_expected = len(message)
while amount_received < amount_expected:
# 接收伺服器返回的資料
data = sock.recv(10)
amount_received += len(data)
print 'client received: {}'.format(data)
except socket.errno, e:
print 'socket error: {}'.format(e)
except exception, e:
print 'other exception: %s'.format(e)
finally:
print 'closing connection to the server'
sock.close()
tcp 三次握手
python**寫套接字很簡單。傳說的tcp三次握手又是如何體現的呢?什麼是三次握手呢?
第一握:首先客戶端傳送乙個syn,請求連線,
第二握:伺服器收到之後確認,並傳送乙個 syn ack應答
第三握:客戶端接收到伺服器發來的應答之後再給伺服器傳送建立連線的確定。
用下面的比喻就是
c:約麼?
s:約c:好的
約會這樣就建立了乙個tcp連線會話。如果是要斷開連線,大致過程是:
上圖也很清晰的表明了三次握手的socket具體過程。
客戶端socket物件connect呼叫之後進行阻塞,此過程傳送了乙個syn。
伺服器socket物件呼叫accept函式之後阻塞,直到客戶端傳送來的syn,然後傳送syn和ack應答
客戶端socket物件收到服務端傳送的應答之後,再傳送乙個ack給伺服器,並返回connect呼叫,建立連線。
伺服器socket物件接受客戶端最後一次握手確定ack返回accept函式,建立連線。
至此,客戶端和伺服器的socket通訊連線建立完成,剩下的就是兩個端的連線物件收發資料
SOCKET 通訊原理
源 基於tcp ip協議的網路程式設計 定義變數 獲得winsock版本 載入winsock庫 初始化 建立套接字 設定套接字選項 關閉套接字 解除安裝winsock庫 釋放所有資源 整個程式架構分為兩大部分,伺服器端客戶端。伺服器socket程式流程 socket bind listen acce...
Socket 通訊原理
socket,又稱 套接字 網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端稱為乙個 socket。socket 的英文願意是 孔 或 插座 在 internet 上的主機一般執行了多個服務軟體,同時提供幾種服務。每種服務都開啟乙個 socket,並繫結到乙個埠上,不同的埠對應不...
Socket 通訊原理
socket 的中文翻譯過來就是 套接字 套接字是什麼,我們先來看看它的英文含義 插座。socket 就像乙個 插座,負責連通兩端的 進行點對點通訊,讓 可以進行通訊,埠就像插座上的孔,埠不能同時被其他程序占用。而我們建立連線就像把插頭插在這個插座上,建立乙個 socket 例項開始監聽後,這個 插...