什麼是socket
socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp/ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。
所以,我們無需深入理解tcp/udp協議,socket已經為我們封裝好了,我們只需要遵循socket的規定去程式設計,寫出的程式自然就是遵循tcp/udp標準的。
也有人將socket說成ip+port,ip是用來標識網際網路中的一台主機的位置,而port是用來標識這台機器上的乙個應用程式,ip位址是配置到網絡卡上的,而port是應用程式開啟的,ip與port的繫結就標識了網際網路中獨一無二的乙個應用程式 而程式的pid是同一臺機器上不同程序或者執行緒的標識。
tcp協議的特點:
1.可靠傳輸。資料從本地傳送出去之後,本地內的快取資料不會清空,只有當服務端收到客戶端的應答後,才清除快取,否則,在規定的時間內則重新傳送資料。tcp提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。
2.位元組流協議。
3。面向連線。在資料進行傳輸之前,服務端與客戶端必須建立乙個雙向的連線後,方能傳輸資料,因此是面向連線服務。
基於網路型別的套接字家族
套接字家族的名字:af_inet
(還有af_inet6被用於ipv6,還有一些其他的位址家族,不過,他們要麼是只用於某個平台,要麼就是已經被廢棄,或者是很少被使用,或者是根本沒有實現,所有位址家族中,af_inet是使用最廣泛的乙個,python支援很多種位址家族,但是由於我們只關心網路程式設計,所以大部分時候我麼只使用af_inet)
**示例:
服務端
importsocket
import
osimport
pickle
#建立乙個socket物件
s =socket.socket(socket.af_inet,socket.sock_stream)
#s.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)
#繫結服務端程式的ip位址和埠號
s.bind(('
127.0.0.1
',7895))
#開始tcp監聽
s.listen(5)#
設定半連線池的大小
#被動接受tcp客戶的連線,等待連線的到來
while
true:
con, add =s.accept()
#print('等待客戶端接入')
#列印客戶端的連線資訊
(add)
while
true:
try:
#接收客戶端傳送的資料
data = int(con.recv(1024))
(data)
#列印資料
if data == 1:
res = os.listdir(os.chdir('
c:\\'))
#將列表轉換為二進位制
res =pickle.dumps(res)
con.send(res)
elif data == 2:
res =os.getcwd()
res =pickle.dumps(res)
con.send(res)
except
exception:
break
con.close()
s.close()
importsocket
import
pickle
#from socket import *
s =socket.socket(socket.af_inet,socket.sock_stream)
s.connect((
'127.0.0.1
',7895))
msg = '''
請輸入操作序號:
1.列印c盤根目錄下的檔案
2.列印當前路徑
(msg)
while
true:
str = input('
>>>:')
#若輸入為空,則重新輸入
ifnot str:continue
s.send(str.encode(
'utf-8'))
data = s.recv(1024)
#反序列化
res =pickle.loads(data)
(res)
s.close()
基於tcp協議的socket
serve服務端 import socket sk socket.socket 例項物件 sk.bind 127.0.0.1 8080 集合內設定ip和埠,利用bind方法 sk.listen 監聽資訊 conn,addr sk.accept 接受到資訊 while true ret conn.re...
基於TCP協議的socket通訊
一 伺服器端 1 建立serversocket,即伺服器端的socket,繫結指定的埠,並偵聽此埠 serversocket server new serversocket 8888 2 呼叫accept 方法,開始偵聽,等待客戶端的連線,在未連線成功之前,處於阻塞狀態,返回的socket,用於與客...
基於TCP協議下的socket程式設計
socket tcp ip協議中乙個埠號和乙個ip位址繫結在一起就生成乙個socket就表示了網路中唯一的乙個程序,它是全雙工的工作方式。基於tcp的socket程式設計 函式的使用 1 socket include see notes include int socket int domain,i...