套接字(socket)是乙個抽象層,應用程式可以通過它傳送或接收資料,可對其進行像對檔案一樣的開啟、讀寫和關閉等操作。套接字允許應用程式將i/o插入到網路中,並與網路中的其他應用程式進行通訊。網路套接字是ip位址與埠的組合。
套接字可以看成是兩個網路應用程式進行通訊時,各自通訊連線中的乙個端點。通訊時,其中的乙個網路應用程式將要傳輸的一段資訊寫入它所在主機的socket中,該socket通過網路介面卡的傳輸介質將這段資訊傳送給另一台主機的socket中,使這段資訊能傳送到其他程式中。因此,兩個應用程式之間的資料傳輸要通過套接字來完成。
伺服器端
import socket
import threading
import time
#tcplink
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)
#建立socket時,af_inet指定使用ipv4協議,如果要用更先進的ipv6,就指定為af_inet6。sock_stream指定使用面向流的tcp協議
s = socket.socket(socket.af_inet,socket.sock_stream)
#繫結監聽的ip和埠號
s.bind(
('127.0.0.1'
,9999))
#用listen()方法監聽,等待連線的最大數量為5
s.listen(5)
print
('waiting for connect...'
)while
true
:#接受乙個新連線,accept()會等待並返回乙個客戶端的連線tuple(sock,(ip,埠號))
sock,addr = s.accept(
)#建立乙個執行緒來處理tcp連線
t = threading.thread(target=tcplink,args=
(sock,addr)
) t.start(
)
客戶端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'shea'
, b'liang'
, b'sarah']:
# 傳送資料:
s.send(data)
print
(s.recv(
1024
).decode(
'utf-8'))
s.send(b'exit'
)s.close(
)
用tcp協議進行socket程式設計在python中十分簡單,對於客戶端,要主動連線伺服器的ip和指定埠,對於伺服器,要首先監聽指定埠,然後,對每乙個新的連線,建立乙個執行緒或程序來處理。通常,伺服器程式會無限執行下去。
伺服器端
import socket
s = socket.socket(socket.af_inet,socket.sock_dgram)
s.bind(
('127.0.0.1'
,9999))
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)
客戶端import socket
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(
)
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...