socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。它把複雜的tcp/ip協議隱藏在socket介面的後面,對使用者而言,一組介面就是全部,讓socket去組織資料。
常用的三類tcp/ip協議的套接字:
流式套接字(sock_stream):
流式套接字用於提供面向鏈結、可靠的資料傳輸服務,使用tcp協議。
資料報套接字(sock_dgram):
資料報套接字提供了一種無連線的服務,該服務不能保證資料傳輸的可靠性,使用udp協議。
原始套接字(sock_raw):
原始套接字允許對較低層次的協議直接訪問,如ip,常用與檢驗新的協議的實現,或者訪問現有服務中配置的新裝置。
tcp服務端:
# tcp服務端
# 迴圈鏈結
from socket import
*ip_port =
('127.0.0.1'
,8000
)back_log =
5buffer_size =
1024
tcp_server = socket(af_inet,sock_stream)
#建立服務端
tcp_server.bind(ip_port)
#繫結ip及埠
tcp_server.listen(back_log)
#開啟服務端
while
true
:print
("服務端開啟了,等待連線"
) conn,addr = tcp_server.accept(
)#等待連線
print
(,addr)
while
true
:try
: msg = conn.recv(buffer_size)
#收資訊
ifnot msg:
break
print
("來自客戶端的資訊》"
,msg.decode(
"utf-8"))
conn.send(msg.upper())
#發資訊
except exception:
print
("該鏈結關閉\n"
)break
conn.close(
)#關閉鏈結
tcp_server.close(
)#關閉服務端
tcp客戶端:
## tcp 客戶端
from socket import
*ip_port =
('127.0.0.1'
,8000
)buffer_size =
1024
tcp_client = socket(af_inet,sock_stream)
#建立客戶端
tcp_client.connect(ip_port)
#建立連線
while
true
: msg =
input
(">>>")if
not msg:
continue
if msg ==
'quit'
:break
tcp_client.send(msg.encode(
'utf-8'))
#發資訊
data = tcp_client.recv(buffer_size)
#收資訊
print
("來自服務端的資訊》"
,data.decode(
"utf-8"))
tcp_client.close(
)
這是乙個簡單的tcp服務端與客戶端,客戶端傳送一段字串,服務端將其大寫並返回給客戶端。
客戶端執行結果:
服務端執行結果:
udp服務端:
#udp服務端
from socket import
*ip_port =
("127.0.0.1"
,8080
)udp_server = socket(af_inet,sock_dgram)
#資料報
udp_server.bind(ip_port)
while
true
: data,addr = udp_server.recvfrom(
1024
)print
(data.decode(
"utf-8"))
udp_server.sendto(data.upper(
),addr)
udp_server.close(
)
udp客戶端:
#udp客戶端
from socket import
*ip_port =
('127.0.0.1'
,8080
)udp_client = socket(af_inet,sock_dgram)
#資料報
while
true
: msg =
input
(">>>"
) udp_client.sendto(msg.encode(
"utf-8"
),ip_port)
data,addr = udp_client.recvfrom(
1024
)print
(data.decode(
"utf-8"
))
由於udp並不需要建立鏈結,因此服務端可以同時跟多個客戶端通訊。 socket程式設計
一直以為serversocket accept之後客戶端才能發資訊,實驗後得出如下結論 1 serversocket沒有accept時,client是可以傳送資訊到server端的。2 serversocket accept之後,正在處理訊息時,client也是可以傳送資訊到server端。如果se...
Socket程式設計
對tcp ip udp socket程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission cont...
socket程式設計
建立socket 建立乙個 socket,它可用於在基於 tcp ip 的網路 如 internet 上通訊。socket s new socket addressfamily.internetwork,sockettype.stream,protocoltype.tcp 若要使用 udp 而不是 ...