欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python高級編程——網絡編程(三)

系統 1900 0

TCP和并發服務器

與UDP不同的是,他是一個面向連接的,可靠的數據傳輸協議

TCP通信比較復雜

先寫一個TCP服務器,一般步驟如下:

1、首先是要創建一個socket套接字:socket()

2、服務器一般是需要一個固定的IP地址和固定端口號,服務器就要綁定這個IP地址和端口號:bind()

3、客戶端連接服務器是是有一定的數量(允許最大連接數)的,而這個數量是服務器設定的:listen()

4、上面3步是做被連接的準備,這一步是來接受客戶端的數據,在接受數據之前,服務器還是需要接受客戶端的socket套接字和IP地址:accept()

5、只有服務器和客戶端綁定相同的IP地址,服務器和客戶端才可以互相接收數據和發送數據,常理來想,服務器是一只被開啟的,也是一直接受數據,所以在接受數據的過程中,我們需要無限循環:recv()

6、如果我們要發送數據給客戶端,客戶端也需要綁定上面的地址,然后需要調用相應的函數send()

            
              import
            
            
               socket



            
            
              #
            
            
               TCP
            
            
              
#
            
            
               創建一個服務器socket套接字
            
            
server_socket =
            
               socket.socket(socket.AF_INET, socket.SOCK_STREAM)

            
            
              #
            
            
               服務器的IP地址和端口號
            
            
address = (
            
              "
            
            
              127.0.0.1
            
            
              "
            
            , 9999
            
              )

            
            
              #
            
            
               服務器綁定地址
            
            
              server_socket.bind(address)

            
            
              #
            
            
               設置服務器的最大連接數
            
            
server_socket.listen(1
            
              )

            
            
              #
            
            
               創建一個等待連接的客戶端socket套接字,accept()函數會返回兩個值,可以自行打印
            
            
client_socket, address =
            
               server_socket.accept()

            
            
              #
            
            
               服務器需要不停的接受客戶端的發來的數據
            
            
              while
            
            
               True:
    
            
            
              """
            
            
              
    以防客戶端連接失敗,需要檢測異常
    無論是接受數據還是發送數據,我們需要將數據統一編碼和解碼
    
            
            
              """
            
            
              try
            
            
              :
        data 
            
            = client_socket.recv(2048).decode(
            
              "
            
            
              UTF-8
            
            
              "
            
            
              )
        
            
            
              #
            
            
               數據處理
            
            
              print
            
            (
            
              "
            
            
              服務器接受的數據:
            
            
              "
            
            
              , data)   # 服務器接受的數據:我是一個客戶端
        client_socket.send(
            
            
              "
            
            
              我是一個服務器
            
            
              "
            
            .encode(
            
              "
            
            
              UTF-8
            
            
              "
            
            
              ))
    
            
            
              except
            
            
              :
        
            
            
              break
            
          

再寫一個TCP客戶端,一般步驟如下:

1、首先是要創建一個socket套接字:socket()

2、客戶端一般是不需要一個固定的IP地址和固定端口號,連接服務器的時候系統會自動分配端口號

3、客戶端連接服務器必須先知道服務器的IP地址和端口號,然后在連接服務器:connect()

4、上面3步是做連接的準備,這一步是來發送客戶端的數據:send()

5、客戶端也可以一直接受服務器發來的數據,所以在接受數據的過程中,我們需要無限循環:recv()

            
              import
            
            
               socket


            
            
              #
            
            
               客戶端需要創建一個套接字
            
            
client_socket =
            
               socket.socket(socket.AF_INET, socket.SOCK_STREAM)


            
            
              #
            
            
               客戶端需要連接服務器,必須先知道服務器的IP地址和端口號
            
            
address = (
            
              "
            
            
              127.0.0.1
            
            
              "
            
            , 9999
            
              )


            
            
              #
            
            
               連接服務器
            
            
              client_socket.connect(address)


            
            
              #
            
            
               這個數據是將要發送的數據
            
            
data = 
            
              "
            
            
              我是一個客戶端
            
            
              "
            
            
              
client_socket.send(data.encode(
            
            
              "
            
            
              UTF-8
            
            
              "
            
            
              ))

            
            
              while
            
            
               True:
    
            
            
              """
            
            
              
    以防服務器中斷退出,需要檢測異常
    無論是接受數據還是發送數據,我們需要將數據統一編碼和解碼
    
            
            
              """
            
            
              try
            
            
              :
        data 
            
            = client_socket.recv(2048).decode(
            
              "
            
            
              UTF-8
            
            
              "
            
            
              )
        
            
            
              #
            
            
               數據處理,這里打印出來并且將數據發回客戶端
            
            
              print
            
            (
            
              "
            
            
              客戶端接受的數據:
            
            
              "
            
            
              , data)
    
            
            
              except
            
            
              :
        
            
            
              break
            
          

?并發服務器,這里我只介紹多線程服務器,進程和線程是差不多的)

  在TCP服務器的原有基礎上增加一個線程,再將監聽數增加為5,就可以允許5個客戶端線程同時訪問,并且可同時發送和接受數據

            
              import
            
            
               socket

            
            
              from
            
             threading 
            
              import
            
            
               Thread



            
            
              #
            
            
               TCP
            
            
              
#
            
            
               創建一個服務器socket套接字
            
            
server_socket =
            
               socket.socket(socket.AF_INET, socket.SOCK_STREAM)

            
            
              #
            
            
               服務器的IP地址和端口號
            
            
address = (
            
              "
            
            
              127.0.0.1
            
            
              "
            
            , 9999
            
              )



            
            
              def
            
            
               net_connect():
    
            
            
              try
            
            
              :
        
            
            
              #
            
            
               服務器綁定地址
            
            
                      server_socket.bind(address)
        
            
            
              #
            
            
               設置服務器的最大連接數
            
            
        server_socket.listen(5
            
              )
    
            
            
              except
            
            
              :
        
            
            
              return
            
            
              #
            
            
               創建線程
            
            
    th = Thread(target=
            
              recv_data)
    th.start()



            
            
              def
            
            
               recv_data():
    
            
            
              #
            
            
               服務器需要不停的接受客戶端的發來的數據
            
            
              while
            
            
               True:
        
            
            
              """
            
            
              
        以防客戶端連接失敗,需要檢測異常
        無論是接受數據還是發送數據,我們需要將數據統一編碼和解碼
        
            
            
              """
            
            
              #
            
            
               創建一個等待連接的客戶端socket套接字,accept()函數會返回兩個值,可以自行打印
            
            
        client_socket, address =
            
               server_socket.accept()
            
            
              try
            
            
              :
            data 
            
            = client_socket.recv(2048).decode(
            
              "
            
            
              UTF-8
            
            
              "
            
            
              )
            
            
            
              #
            
            
               數據處理
            
            
              print
            
            (
            
              "
            
            
              服務器接受的數據:
            
            
              "
            
            
              , data)
            client_socket.send(
            
            
              "
            
            
              我是一個服務器
            
            
              "
            
            .encode(
            
              "
            
            
              UTF-8
            
            
              "
            
            
              ))
        
            
            
              except
            
            
              :
            
            
            
              break
            
            
              


net_connect()
            
          

?

在TCP客戶端上也增加一個線程,然后同時運行多次這個客戶端程序:

            
              import
            
            
               socket


            
            
              #
            
            
               客戶端需要創建一個套接字
            
            
              from
            
             threading 
            
              import
            
            
               Thread

client_socket 
            
            =
            
               socket.socket(socket.AF_INET, socket.SOCK_STREAM)


            
            
              #
            
            
               客戶端需要連接服務器,必須先知道服務器的IP地址和端口號
            
            
address = (
            
              "
            
            
              127.0.0.1
            
            
              "
            
            , 9999
            
              )



            
            
              def
            
            
               net_connect():
    
            
            
              try
            
            
              :
        
            
            
              #
            
            
               連接服務器
            
            
                      client_socket.connect(address)
    
            
            
              except
            
            
              :
        
            
            
              return
            
            
              
    th 
            
            = Thread(target=
            
              recv_data)
    
            
            
              #
            
            
               th.setDaemon(True)
            
            
                  th.start()



            
            
              def
            
            
               recv_data():
    
            
            
              #
            
            
               這個數據是將要發送的數據
            
            
    data = 
            
              "
            
            
              我是一個客戶端
            
            
              "
            
            
              
    client_socket.send(data.encode(
            
            
              "
            
            
              UTF-8
            
            
              "
            
            
              ))

    
            
            
              while
            
            
               True:
        
            
            
              """
            
            
              
        以防服務器中斷退出,需要檢測異常
        無論是接受數據還是發送數據,我們需要將數據統一編碼和解碼
        
            
            
              """
            
            
              try
            
            
              :
            data 
            
            = client_socket.recv(2048).decode(
            
              "
            
            
              UTF-8
            
            
              "
            
            
              )
            
            
            
              #
            
            
               數據處理,這里打印出來并且將數據發回客戶端
            
            
              print
            
            (
            
              "
            
            
              客戶端接受的數據:
            
            
              "
            
            
              , data)
        
            
            
              except
            
            
              :
            
            
            
              break
            
            
              


net_connect()
            
          

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美午夜在线 | 久久精品久久久久 | 九九九视频| 久久精品成人 | 综合导航 | 成人免费视频 | 特黄特色大片免费视频观看 | 国产高清亚洲 | 亚洲国产一区在线 | 国产精品久久久99 | 国产亚洲精品国产 | 草草影院永久地址 | 日本色综合 | 青娱乐手机在线 | 99在线精品视频免费观里 | 欧美影院久久 | 午夜影视免费片在线观看 | 激情男女视频 | 九九热精品在线观看 | 91国产精品 | 毛片毛片毛片毛片毛片怎么 | 日本不卡在线一区二区三区视频 | 国产v欧美v日本v精品 | 久热香蕉精品视频在线播放 | 色成人综合 | 国产精品久久久久久吹潮 | 亚洲精品综合久久 | 国产探花在线精品一区二区 | 久草手机在线视频 | 日韩精品在线播放 | 欧美激情在线播放 | 999精品国产人妻无码系列久久 | 丝袜美腿一区二区三区动态图 | 羞羞哒哒视频 | 91九色视频在线播放 | 成人福利在线看 | 91热视频在线观看 | 福利片在线观看 | 999精品国产人妻无码系列久久 | 91精品国产综合久久久久久 | 色噜噜狠狠狠狠色综合久 |