用下面的一張圖可以清楚表示:
下面的python實現也很清晰:
server:
client:def
tcplink
(sock, addr):
'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()
'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)
'waiting for connection...'
while
true:
# 接受乙個新連線:
sock, addr = s.accept()
# 建立新執行緒來處理tcp連線:
t = threading.thread(target=tcplink, args=(sock, addr))
t.start()
注意,tcp連線建立的是雙向通道,雙方都可以同時給對方發資料。但是誰先發誰後發,怎麼協調,要根據具體的協議來決定。s = socket.socket(socket.af_inet, socket.sock_stream)
# 建立連線:
s.connect(('127.0.0.1', 9999))
# 接收歡迎訊息:
s.recv(1024)
for data in ['michael', 'tracy', 'sarah']:
# 傳送資料:
s.send(data)
s.recv(1024)
s.send('exit')
s.close()
比如,我們可以基於tcp實現推送:客戶端和服務端建立乙個套接字,client只是以阻塞的方式read(),直到server有資訊。
server:
clientdef
tcplink
(sock, addr):
'accept new connection from %s:%s...' % addr
sock.send('welcome!')
while
true:
time.sleep(1)
sock.send('hello!')
sock.close()
'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)
'waiting for connection...'
while
true:
# 接受乙個新連線:
sock, addr = s.accept()
# 建立新執行緒來處理tcp連線:
t = threading.thread(target=tcplink, args=(sock, addr))
t.start()
s = socket.socket(socket.af_inet, socket.sock_stream)
s.connect(('127.0.0.1', 9999))
while true:
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...