tcp套接字程式設計模型

2021-07-11 19:55:19 字數 2350 閱讀 4110

用下面的一張圖可以清楚表示:

下面的python實現也很清晰:

server:

def

tcplink

(sock, addr):

print

'accept new connection from %s:%s...' % addr

sock.send('welcome!')

while

true:

data = sock.recv(1024)

time.sleep(1)

if data == 'exit'

ornot data:

break

sock.send('hello, %s!' % data)

sock.close()

print

'connection from %s:%s closed.' % addr

if __name__ == '__main__':

s = socket.socket(socket.af_inet, socket.sock_stream)

s.bind(('127.0.0.1', 9999))

s.listen(5)

print

'waiting for connection...'

while

true:

# 接受乙個新連線:

sock, addr = s.accept()

# 建立新執行緒來處理tcp連線:

t = threading.thread(target=tcplink, args=(sock, addr))

t.start()

client:

s = socket.socket(socket.af_inet, socket.sock_stream)

# 建立連線:

s.connect(('127.0.0.1', 9999))

# 接收歡迎訊息:

print

s.recv(1024)

for data in ['michael', 'tracy', 'sarah']:

# 傳送資料:

s.send(data)

print

s.recv(1024)

s.send('exit')

s.close()

注意,tcp連線建立的是雙向通道,雙方都可以同時給對方發資料。但是誰先發誰後發,怎麼協調,要根據具體的協議來決定。

比如,我們可以基於tcp實現推送:客戶端和服務端建立乙個套接字,client只是以阻塞的方式read(),直到server有資訊。

server:

def

tcplink

(sock, addr):

print

'accept new connection from %s:%s...' % addr

sock.send('welcome!')

while

true:

time.sleep(1)

sock.send('hello!')

sock.close()

print

'connection from %s:%s closed.' % addr

if __name__ == '__main__':

s = socket.socket(socket.af_inet, socket.sock_stream)

s.bind(('127.0.0.1', 9999))

s.listen(5)

print

'waiting for connection...'

while

true:

# 接受乙個新連線:

sock, addr = s.accept()

# 建立新執行緒來處理tcp連線:

t = threading.thread(target=tcplink, args=(sock, addr))

t.start()

client

s = socket.socket(socket.af_inet, socket.sock_stream)

s.connect(('127.0.0.1', 9999))

while true:

print

s.recv(1024)

s.close()

TCP套接字程式設計模型

tcp套接字程式設計經常使用在客戶 伺服器程式設計模型 簡稱c s模型 中,c s模型根據複雜度分為簡單的客戶 伺服器模型和複雜的客戶 伺服器模型。c s簡單客戶 伺服器模型是一對一關係,乙個伺服器端某一時間段內只對應處理乙個客戶端的請求,迭代伺服器模型屬於此模型。c s複雜伺服器模型是一對多關係,...

TCP套接字程式設計模型

tcp套接字程式設計經常使用在客戶 伺服器程式設計模型 簡稱c s模型 中,c s模型根據複雜度分為簡單的客戶 伺服器模型和複雜的客戶 伺服器模型。c s簡單客戶 伺服器模型是一對一關係,乙個伺服器端某一時間段內只對應處理乙個客戶端的請求,迭代伺服器模型 屬於此模型。c s複雜伺服器模型是一對多關係...

TCP套接字程式設計

網路程式設計又稱為套接字程式設計,為了與遠端計算機進行資料傳輸,需要連線到網際網路,而程式設計中的 套接字 就是用來連線該網路的工具。它本身具有連線的含義,還可以表示為兩台計算機之間的網路連線。4.呼叫accept函式受理連線請求 基於tcp的服務端 客戶端 tcp伺服器端預設函式呼叫順序 sock...