python-網路編程-socket編程

來源:互聯網
上載者:User

標籤:需要   except   報錯   tcp   name   mac   smtp   put   cnn   

一、socket文法

      網路七層模型(OSI模型)

      1物理層——>2資料連結層(mac地址)——>3網路層(IP)——>4傳輸層(TCP/IP 、UDP協議傳輸)——>5會話層——>6展示層——>7應用程式層(http、ftp、smtp、pop3)

      socket文法及相關知識點:

        socket是為兩個程式之間建立一個雙向通道,來實現資料轉送。  網路通訊是通過ip+port來定位具體的目標機器的具體的服務,作業系統有0-65535個連接埠,每個連接埠獨立對外提供服務。   

           建立一個socket必須有兩個端:服務端和用戶端

           服務端:被動等待接受用戶端的請求

                      建立流程:1.建立一個socket執行個體sk——>sk.bind()設定服務端可監聽的網路地址和連接埠號碼——>sk.listen()開始監聽——>

                                       cnn,val=sk.accepr()接受用戶端的串連——>cnn.recv()接受資料——>cnn.send()發送資料——>close

              1、建立一個socket執行個體 :socket.socket()

1 import socket2 server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

                第一個參數為:地址簇

                socket.AF_INET       ipv4

                socket.AF_INET6     IPV6           

                socket.AF_UNIX       unix本機進行之間通訊    

       

               第二個參數:socket類型

                socket.SOCKET_STREAM   for tcp

                socket.SOCKET_DGRAM    for udp         

      socket.SOCK_RAW   原始通訊端,普通的通訊端無法處理ICMP、IGMP等網路報文,而SOCK_RAW可以;其次,SOCK_RAW也可以處理特殊的IPv4報文;此外,利用原始通訊端,可以通過IP_HDRINCL通訊端選項由使用者構造IP頭。

        socket.SOCK_RDM       是一種可靠的UDP形式,即保證交付資料報但不保證順序。SOCK_RAM用來提供對原始協議的低級訪問,在需要執行某些特殊操作時使用,如發送ICMP報文。SOCK_RAM通常僅限於進階使用者或管理員啟動並執行程式使用。

                2、 綁定地址:sk.bind(address)

                     address的格式取決於地址簇,如果是IPV4,則以元祖的形式傳入地址

1 server.bind((‘0.0.0.0‘,8001))

            3、開始監聽:sk.listen(backlog)

                    開始監聽傳入的串連,backlog表示在拒絕串連之前,可掛起的最大串連數,backlog最大為5

1 server.listen(5)

            4、接收串連並返回新通訊端對象和用戶端地址

1 cnn,client_addr=server.accept()

              cnn為新的通訊端對象,clinet為串連的用戶端地址

            5、接受和發送用戶端資料

1 cnn.recv(1024)2 cnn.send(b‘got your msg‘)

 

 

          用戶端:主動向服務端發送請求

                     流程:建立一個socket執行個體c——>c.connect()串連服務端——>c.send()發送資料——>c.recv()接受資料——>c.close()           

1 import socket2 client=socket.socket()     #  1、建立socket執行個體3 client.connect((‘localhost‘,8001))   #2、串連4 msg=input(‘>>:‘)5 client.send(msg.encode())       #3、發送資料6 print(‘send:%s‘ %msg)7 data=client.recv(1024)8 print(‘receive from server:%s‘%data)     #4、接受資料

          下面是小練習:

            服務端:

 1 import socket 2 server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 3 server.bind((‘127.168.0.1‘,8001)) 4 server.listen(5) 5 print(‘------------start to listen--------‘) 6 while True:    #用戶端斷開與服務端的串連時,防止直接跳出第二個迴圈後,報錯,而是回到該迴圈,重新接受其他用戶端的請求 7     cnn,client_addr=server.accept() 8     print(cnn,client_addr) 9     while True:10         try:11             data=cnn.recv(1024)    #有一個用戶端中斷連線是,recv不到串連,會報錯,用try來進行異常處理,防止程式終止12             print(‘用戶端:%s‘%data)13             s_data=input(‘服務端:‘)14             cnn.send(s_data.encode())15         except ConnectionResetError as e:16             print(e)17             break

             用戶端:

 1 import socket 2 client=socket.socket() 3 client.connect((‘127.168.0.1‘,8001)) 4  5 while True: 6     msg=input(‘用戶端:‘) 7     client.send(msg.encode()) 8     # print(‘send:%s‘ %msg) 9     data=client.recv(1024)10     print(‘服務端:%s‘%data)

 

             

 

python-網路編程-socket編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.