我們知道ip層的ip位址可以唯一標示主機,而tcp層協議和埠號可以唯一標示主機的乙個程序,這樣我們可以利用ip位址+協議+埠號唯一標示網路中的乙個程序。能夠唯一標示網路中的程序後,它們就可以利用socket進行通訊了.
什麼是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的乙個抽象層,它把tcp/ip層複雜的操作抽象為幾個簡單的介面**用層呼叫已實現程序在網路中通訊。
socket 示例:
服務端(python實現):
importsocket
#建立乙個socket物件
server = socket.socket() #
相當於建立了一部**
ip_port = ('
192.168.111.1
',8001) #
建立乙個**卡
server.bind(ip_port) #
插上**卡
server.listen(5) #
監聽著**,我能監聽5個,接到乙個**之後,後面還能有四個人給我打**,但是後面這四個人都要排隊等著,等著我第乙個**掛掉,再來第6個的時候,第六個人的手機會報錯
print('
11111')
#等著別人給我打**,打來**的時候,我就拿到了和對方的這個連線通道conn和對方的**號碼addr
conn,addr = server.accept() #
阻塞住,一直等到有人連線我,連線之後得到乙個元祖,裡面是連線通道conn和對方的位址(ip+埠)
print('
22222')
(conn)
print('
>>>>>>>>>
',addr)
while
true:
from_client_data = conn.recv(1024) #
服務端必須通過兩者之間的連線通道來收訊息
from_client_data = from_client_data.decode('
utf-8')
(from_client_data)
if from_client_data == '
bye'
:
break
server_input = input('
明威說》:')
conn.send(server_input.encode(
'utf-8'))
if server_input == '
bye'
:
break
conn.close()
#掛**
server.close() #
關手機
客戶端:
#_*_coding:utf-8_*_
import
socket
import
time
client =socket.socket()
server_ip_port = ('
192.168.111.1
',8001)
client.connect(server_ip_port)
while
true:
client_input = input('
小文說》:')
client.send(client_input.encode(
'utf-8
')) #
給服務端傳送訊息
if client_input == '
bye'
:
break
from_server_data = client.recv(1024)
print('
來自服務端的訊息:
',from_server_data.decode('
utf-8'))
if from_server_data.decode('
utf-8
') == '
bye'
:
break
client.close()
#客戶端掛**
注意:先執行server,然後再執行client,然後你會發現client這個檔案再輸出臺的地方讓你輸入內容,你輸入乙個內容然後回車,你會發現server那邊的控制台就輸出了以client傳送的內容
詳細的一些關於socket以及tcp以及udp協議傳輸的可看 :
網路基礎之 網路基礎,socket程式設計
1 什麼是socket 網路基礎 socket 2 為何要學習socket程式設計 基於socket開發乙個c s或者b s結構的軟體 client 網路 server browser 網路 server 3 如何基於socket程式設計 網路 網路是什麼 底層的物理連線介質 網際網路通訊協議 os...
socket網路程式設計基礎
伺服器與客戶端 p94 p98先學習基礎 再學習socket程式設計 參考socket,也叫套接字,描述了計算機是ip位址和埠,電腦程式之間採用socket進行通訊。socket把複雜的tcp ip協議族隱藏在介面後面,方便使用。tcp提供流和資料報兩種通訊方式,所以套接字也分為流套接字和資料報套接...
網路基礎 Socket程式設計
tpc的服務端要先監聽乙個埠,一般是先呼叫bind函式,給這個soket賦予乙個ip位址和埠。當服務端有了ip和埠號,就可以呼叫listen函式進行監聽。這時候客戶端就可以發起連線了。在作業系統中,為每個socket維護兩個佇列。乙個是已經建立了連線的佇列,三次握手已完畢,處於established...