1. 程式人生 > >玩轉網路-初識Socket基礎-1

玩轉網路-初識Socket基礎-1

初識Socket基礎-1

如何通訊 在網際網路上我們使用ip地址來確定一臺主機,一臺存在公網上的主機,如果是在內網上則通過內網ip地址確定內網主機,而我們要找到目標,不只要一個IP地址,同時還需要一個埠號,因為一臺主機上有六萬多個埠號,通訊的時候不止是主機與主機通訊,而是程序與程序之間通訊,每個程序之間繫結埠,然後通訊,所有要知道對面伺服器程序繫結在哪個埠上,對它進行連結. IP地址表示式[IP Address]:[Port]*

服務端與客戶端之間的流程    Server     Client

  1. 建立socket    建立socket
  2. bind埠     連線目標
  3. 等待連結     開始通訊
  4. 開始通訊     關閉連線
  5. 關閉連線

服務端首先建立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不變,你寫一個客戶端連線公網的裝置是沒問題的,自己寫個服務端別人連線比較麻煩