python網絡編程學習

網絡通訊python

  邊緣網絡中的主機數目龐大,計算機網絡是如何實現網絡中的兩臺主機之間的通訊的呢?編程

  簡單的來講,計算機網絡中的主機通訊如同現實生活中的物流,當咱們須要發送一個快遞時,咱們須要首先須要準備本身要發送的物品,至關於網絡體系結構中的應用層,編寫本身的發送的消息;第二,要發送的物品每每須要一個外包裝,避免物品的損壞,至關於應用層的消息傳遞到傳輸層進行的封裝(消息封裝爲分組);第三,填寫快遞單的收發地址,於網絡層中填寫IP,端口地址相同;第四,將快遞交給站點準備發送,等價於在鏈路層將分組數據包封裝成幀,準備在物理層發送;最後,快遞員經過既定的物流路線將快遞發送出去,與在物理層經過路由信息表將幀發送出去相同。服務器

 

網絡數據包傳送網絡

  網絡中數據包的傳送大體分爲兩類:socket

  1.   TCP傳送:基於TCP協議,完成完整的3此握手過程,實現可靠的信息傳送,可以保證發送的消息必定可以傳送到接收方。
  2.   UDP傳送:基於UDP協議,相似於洪泛傳送,不會完成3此握手過程,所以不可以保證發送的消息必定可以被接收方接收

Socket編程ide

  python經過使用socket抽象網絡中主機進程之間的交互實現網絡通訊。Socket實現了IP地址與端口的抽象,其中IP指定了主機在網絡中的位置,端口指定了主機上接收,發送信息的應用程序。函數

  python中,Socket又稱"套接字",應用程序一般經過"套接字"向網絡發出請求或者應答網絡請求,使主機間或者一臺計算機上的進程間能夠通信。spa

  服務器端Socket編程計算機網絡

    建立Socket對象code

    綁定到相應的IP地址端口

    打開監聽服務

    接收數據

    關閉Socket

  客戶端Socket編程

    建立Socket對象

    鏈接到遠程主機IP地址端口

    發送數據

    關閉Socket

Socket對象建立函數

    socket.socket([family[, type[, proto]]])

    familly:對應協議簇,AF_UNIX或者AF_INET

    type:對應面向鏈接的仍是非鏈接分爲SOCK_STREAMSOCK_DGRAM(TCP和UDP)

    proto:協議,HTTP,SMTP等

  Socket內置方法

    服務器:

      s.bind():綁定地址

      s.listen():開啓監聽服務

      s.accept():被動等待接收客戶端的鏈接請求

    客戶端:

      s.connect():鏈接到遠程主機

    公用:

      s.recv():接收TCP數據流

      s.send():發送TCP數據流

      s.recvfrom():接收UDP數據流

      s.sendto():發送UDP數據流

      s.close():關閉一個socket鏈接

      s.getpeername():返回鏈接套接字的遠程地址

      s.getsockname():返回套接字本身的地址

      s.setsockopt():設置給定套接字選項的值

      s.getsockopt():返回套接字選項的值

      s.makefile():建立一個與該套接字相關連的文件

實例

    

# -*- coding: utf-8 -*-

import socket

s = socket.socket() #建立socket對象
host = socket.gethostname() #獲取本機主機名
port = 20000
s.bind((host, port))

s.listen(5) #開啓監聽服務,5表示最大能夠鏈接5個客戶機

while True:
    c, address = s.accept() #創建一個客戶鏈接
    print '客戶端地址:', address 
    c.send('hello') #向客戶端發送消息
    c.close() #關閉一個socket鏈接
Server Code
# -*- coding: utf-8 -*-

import socket

s = socket.socket() #建立socket對象

host = socket.gethostname() #調用socket類方法獲取主機名
port = 20000 #定義綁定端口

s.connect((host, port)) #鏈接到遠程主機

print s.recv(1024) #接收數據,1024是字節數
s.close() #關閉一個socket鏈接
Client Code
相關文章
相關標籤/搜索