Python TCP與UDP程式設計

2021-10-07 06:59:43 字數 3384 閱讀 3006

socket是網路程式設計的乙個抽象概念。通常我們用乙個socket表示「開啟了乙個網路鏈結」,而開啟乙個socket需要知道目標計算機的ip位址和埠號,再指定協議型別即可。

操作步驟建立socket

建立連線

接收服務端資料

傳送資料

斷開連線

# 客戶端**

import socket

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

# 建立連線:

s.connect(

('127.0.0.1'

,9999))

# 接收歡迎訊息:

print

(s.recv(

1024

).decode(

'utf-8'))

for data in

[b'michael'

, b'tracy'

, b'sarah']:

# 傳送資料:

s.send(data)

print

(s.recv(

1024

).decode(

'utf-8'))

s.send(b'exit'

)s.close(

)

操作步驟建立socket

繫結監聽埠

多執行緒接收客戶端連線

資料接收與傳送

import socket,threading,time

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

# 監聽埠:

s.bind(

('127.0.0.1'

,9999))

s.listen(5)

print

('waiting for connection...'

)# 每個連線都必須建立新執行緒(或程序)來處理,

# 否則,單執行緒在處理連線的過程中,無法接受其他客戶端的連線:

deftcplink

(sock, addr)

:print

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

% addr)

sock.send(b'welcome!'

)while

true

: data = sock.recv(

1024

) time.sleep(1)

ifnot data or data.decode(

'utf-8')==

'exit'

:break

sock.send(

('hello, %s!'

% data.decode(

'utf-8'))

.encode(

'utf-8'))

sock.close(

)print

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

% addr)

while

true

:# 接受乙個新連線:

sock, addr = s.accept(

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

t = threading.thread(target=tcplink, args=

(sock, addr)

) t.start(

)

執行截圖

服務端:

客戶端:

tcp是建立可靠連線,並且通訊雙方都可以以流的形式傳送資料。相對tcp,udp則是面向無連線的協議。

使用udp協議時,不需要建立連線,只需要知道對方的ip位址和埠號,就可以直接發資料報。但是,能不能到達就不知道了。

雖然用udp傳輸資料不可靠,但它的優點是和tcp比,速度快,對於不要求可靠到達的資料,就可以使用udp協議。

我們來看看如何通過udp協議傳輸資料。和tcp類似,使用udp的通訊雙方也分為客戶端和伺服器。伺服器首先需要繫結埠:

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

# 繫結埠:

s.bind(

('127.0.0.1'

,9999

))

建立socket時,sock_dgram指定了這個socket的型別是udp。繫結埠和tcp一樣,但是不需要呼叫listen()方法,而是直接接收來自任何客戶端的資料:

print

('bind udp on 9999...'

)while

true

:# 接收資料:

data, addr = s.recvfrom(

1024

)print

('received from %s:%s.'

% addr)

s.sendto(b'hello, %s!'

% data, addr)

recvfrom()方法返回資料和客戶端的位址與埠,這樣,伺服器收到資料後,直接呼叫sendto()就可以把資料用udp發給客戶端。

客戶端使用udp時,首先仍然建立基於udp的socket,然後,不需要呼叫connect(),直接通過sendto()給伺服器發資料:

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

for data in

[b'michael'

, b'tracy'

, b'sarah']:

# 傳送資料:

s.sendto(data,

('127.0.0.1'

,9999))

# 接收資料:

print

(s.recv(

1024

).decode(

'utf-8'))

s.close(

)

從伺服器接收資料仍然呼叫recv()方法。

Python TCP程式設計

tcp 對於tcp,我想大部分同學不會陌生。tcp是乙個網路層協議,通過tcp可以建立客戶端到伺服器的連線,並相互傳遞資料。那麼在python中如何使用tcp來做一些操作呢?socket socket在網路程式設計中,是乙個抽象概念。我們用socket來表示開啟了乙個從客戶端到伺服器或者從伺服器到客...

Python tcp程式設計

1 客戶端 coding utf 8 udp穩定性不好,tcp對包有檢查建立通道 建立連線 上傳流量以部分是上傳的應答 這之中還包括超時重傳,錯誤校驗,流量控制和阻塞管理。檔案分塊傳輸 import socket def main 1.建立tcp的套接字 tcp socket socket.sock...

python TCP程式設計再試牛刀

該示例演示的是c s服務模型,server端接收來自客戶端的請求,然後只是很簡單地給客戶端返回 hello 來自客戶端的原文。核心在於兩端socket的建立和連線以及資料的傳送和接收。server端 server.py coding utf 8 created on 2016年8月3日 author...