2018-6-15
使用python程序,連線別的伺服器程序的通訊埠進行通訊。
socket——一條網路鏈結
怎麼建立這條鏈結?需要知道目標計算機的ip位址和埠號,再指定協議型別即可。
tcp/ip簡介
ip協議負責把資料從一台計算機通過網路傳送到另一台計算機。資料被分割成一小塊一小塊,然後通過ip包傳送出去。由於網際網路鏈路複雜,兩台計算機之間經常有多條線路,因此,路由器就負責決定如何把乙個ip包**出去。ip包的特點是按塊傳送,途徑多個路由,但不保證能到達,也不保證順序到達。許多常用的更高階的協議都是建立在tcp協議基礎上的,比如用於瀏覽器的http協議、傳送郵件的smtp協議等。tcp協議則是建立在ip協議之上的。tcp協議負責在兩台計算機之間建立可靠連線,保證資料報按順序到達。tcp協議會通過握手建立連線,然後,對每個ip包編號,確保對方按順序收到,如果包丟掉了,就自動重發。
乙個tcp報文除了包含要傳輸的資料外,還包含源ip位址和目標ip位址,源埠和目標埠。
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...