玩轉網路-初識Socket基礎-1
阿新 • • 發佈:2018-12-21
初識Socket基礎-1
如何通訊 在網際網路上我們使用ip地址來確定一臺主機,一臺存在公網上的主機,如果是在內網上則通過內網ip地址確定內網主機,而我們要找到目標,不只要一個IP地址,同時還需要一個埠號,因為一臺主機上有六萬多個埠號,通訊的時候不止是主機與主機通訊,而是程序與程序之間通訊,每個程序之間繫結埠,然後通訊,所有要知道對面伺服器程序繫結在哪個埠上,對它進行連結. IP地址表示式[IP Address]:[Port]*
服務端與客戶端之間的流程 Server Client
- 建立socket 建立socket
- bind埠 連線目標
- 等待連結 開始通訊
- 開始通訊 關閉連線
- 關閉連線
服務端首先建立socket,將socket繫結到某個埠上面,等待有人來連線,如果有人連線之後,就開始通訊,通訊完畢就後就關閉socket
客戶端建立socket,直接使用socket連線目標,再直接通訊,通訊完畢關閉socket
學習筆記適用於python2,如果python3則需要另按裝環境和模組,及修改一些語法
iserver
#coding:utf-8 from socket import * #匯入模組 s = socket.(AF_INET.SOCK_STREAM) #建立socket,因為匯入全部則不用寫socket. #兩個函式(AF_INET=ipv4地址簇,,SOCK_STREAM=TCP協議) s.bind(('',6666)) #繫結socket到本地地址和埠(空字元代表本機,6666代表埠) s.listen(1) #監聽埠 #1代表允許最大接納連線數 sock,addr = s.accept #accept特別像raw_input(),在python3中是input() #等待客戶端連線請求出現,接受請求之後會返回 (返回兩次第一次返回的是我們操作的socket,第二次返回的是連線那臺機器的ip地址和埠號) print ‘Connected by’,addr #列印一下誰連線過來的 sock.send('Welcome to my blog') #傳送資訊 text = sock.recv(1024) #接受到的資訊賦值,1024是接受緩衝區的長度 print text #列印接收的長度 sock.close() s.close() 關閉socket
iClient
coding:utf-8
from socket import *
#匯入模組
c = socket(AF_INET,SOCK_STREAM)
#建立socket
c.connect(("127.0.0.1",6666))
#連線本地6666埠
text = c.recv()
#接收資訊
print text
列印接收的資訊
c.send("hello word")
傳送資訊
埠對映
如果在不同地方,需要用socket進行通訊,而在自己家裡需要路由器進行轉發到公網,所以要提到埠對映的問題,比如說我路由器下有很多埠,我把我路由器的80號埠對映到我本機的80號埠,別人訪問80號埠,就是我電腦的80號埠,對映的可以在路由器上直接設定,有時候網路比較複雜,路由器出去的時候還是一個內網,不過這個內網還是是一些承包裝置,還是一些交換機之類的,還是沒有公網ip,這樣映射不出去,如果要像這樣遠端通訊連結,最好使用vps,這樣能保證ip不變,你寫一個客戶端連線公網的裝置是沒問題的,自己寫個服務端別人連線比較麻煩