Python 網路程式設計

2021-08-20 18:54:23 字數 3472 閱讀 2705

2018-6-15

使用python程序,連線別的伺服器程序的通訊埠進行通訊。

socket——一條網路鏈結

怎麼建立這條鏈結?需要知道目標計算機的ip位址和埠號,再指定協議型別即可。

tcp/ip簡介

ip協議負責把資料從一台計算機通過網路傳送到另一台計算機。資料被分割成一小塊一小塊,然後通過ip包傳送出去。由於網際網路鏈路複雜,兩台計算機之間經常有多條線路,因此,路由器就負責決定如何把乙個ip包**出去。ip包的特點是按塊傳送,途徑多個路由,但不保證能到達,也不保證順序到達。

tcp協議則是建立在ip協議之上的。tcp協議負責在兩台計算機之間建立可靠連線,保證資料報按順序到達。tcp協議會通過握手建立連線,然後,對每個ip包編號,確保對方按順序收到,如果包丟掉了,就自動重發。

乙個tcp報文除了包含要傳輸的資料外,還包含源ip位址和目標ip位址,源埠和目標埠。

許多常用的更高階的協議都是建立在tcp協議基礎上的,比如用於瀏覽器的http協議、傳送郵件的smtp協議等。

tcp程式設計

【socket和tcp和udp的區別和聯絡是什麼???廖雪峰教程裡似乎沒有給

2018-6-21

客戶端client

基於tcp的socket:

# 匯入socket庫:

import socket

# 建立乙個socket:

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

# 建立連線:

s.connect(('www.sina.com.cn', 80))

# 傳送資料:

# 接收資料:

buffer =

while

true:

# 每次最多接收1k位元組:

d = s.recv(1024)

if d:

else:

break

data = b''.join(buffer)

# 關閉連線:

s.close()

header, html = data.split(b'\r\n\r\n', 1)

print(header.decode('utf-8'))

# 把接收的資料寫入檔案:

with open('sina.html', 'wb') as f:

f.write(html)

先建立乙個socket連線:

ipv4(ipv6)協議

乙個面向流的tcp協議

此時沒有建立連線。

指定伺服器的ip和埠號

此時建立連線

向伺服器傳送請求—要求伺服器給你東西

接收伺服器返回的資料

接收完畢關閉socket

此時一次通訊結束

儲存接收的資料

伺服器server

server.py

乙個伺服器的程序需要乙個固定的埠來監聽來自客戶端的連線,每來乙個連線,就建立乙個socket。

同時,會有不止乙個客戶端與伺服器連線,為了不亂套,伺服器就需要區分每乙個socket連線。因此,socket具有四項屬性:伺服器位址,伺服器端口,客戶端位址,客戶端埠。

其中前兩項是為了客戶端能夠找到伺服器而具備的,後兩項是伺服器區分客戶端的標的。

當然,區分是必須的,那麼伺服器也需要能夠同時與多個客戶端通訊,因此多執行緒/程序也是必須的。

# 匯入socket庫:

import socket

import threading

import time

# create server's socket

# 伺服器也得有乙個socket連線,感覺像是乙個通道

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

# listening port

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

# 127.0.0.1 是專指本機位址的

s.listen(5)

# 引數'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:

# receive a new connection:

sock, addr = s.accept()

# accept()功能是等待並返回乙個客戶端連線

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

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

t.start()

client.py

# 匯入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()

python網路程式設計 TCP網路程式設計

tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...

python 網路程式設計

今天晚上學習了一下python的網路程式設計,實現了client向server傳送資料,server反饋資訊 python 3.3 版本 server from socket import class tcpserver object def init self,serverport self.se...

python網路程式設計

網路通訊是計算機之間的程序之間的通訊。tcp程式設計 tcp連線建立是雙向通道,客戶端與服務端都可以給對方傳送資料。建立tcp連線時,主動發起連線的叫客戶端,被動響應連線的叫服務端。建立乙個tcp的socket連線 用socket family,type 建立套接字獲得socket物件。family...