<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      RST報文段的意義

      客戶端代碼,服務(wù)端代碼如下

      客戶端代碼
      import socket
      
      SERVER_ADDR = '127.0.0.1'
      PORT        = 18000
      CHUNK_SIZE  = 1024 * 4
      
      def main():
          """ echo 客戶端: 基于 AF_INET domain and TCP type 的 socket """
          # socket -> s.connect -> s.sendall -> s.shutdown -> loop s.recv -> s.close
          with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
              s.connect((SERVER_ADDR, PORT))
              s.sendall(b"hello")
              s.shutdown(socket.SHUT_WR)  # if without this line code, the server and client will be deadlocked!
      
              response = b""
              while data := s.recv(CHUNK_SIZE):
                  response += data
              print(response.decode())
      
      if __name__ == "__main__":
          main()
      
      
      服務(wù)端代碼
      import socket
      
      HOST = '0.0.0.0'
      PORT = 18000
      BACKLOG = 16
      CHUNK_SIZE = 1024 * 4
      
      def handle_client(conn, addr):
          with conn:
              print(f"{addr[0]}:{addr[1]}", flush=True, end=' ')
      
              request = b""
              while data := conn.recv(CHUNK_SIZE):
                  request += data
              print(request.decode(), flush=True)
      
              conn.sendall(request)
      
      def main():
          """ echo 服務(wù)器: 基于 AF_INET domain and TCP type 的 socket """
          # socket -> s.bind -> s.listen -> s.accept -> s.close
          with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
              s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
              s.bind((HOST, PORT))
              s.listen(BACKLOG)
              print(f"Listening on {HOST}:{PORT}\n", flush=True) 
      
              try:
                  while True:
                      conn, addr = s.accept()
                      handle_client(conn, addr)
              except KeyboardInterrupt:
                  print("\nServer shutting down...")
      
      if __name__ == "__main__":
          main()
      

      運(yùn)行結(jié)果如下

      image

      刪除客戶端一行代碼就會發(fā)生死鎖,如下

      s.shutdown(socket.SHUT_WR)  # if without this line code, the server and client will be deadlocked!
      

      死鎖發(fā)生的時候,按下Ctrl + C 結(jié)束客戶端的運(yùn)行,則有以下過程

      1. 客戶端的內(nèi)核開始清理客戶端的socket資源,首先向服務(wù)端發(fā)送一個FIN報文
      2. 服務(wù)端內(nèi)核收到FIN報文,然后服務(wù)端從recv返回,打印數(shù)據(jù),然后sendall發(fā)送數(shù)據(jù)
      3. 客戶端收到服務(wù)端發(fā)送的數(shù)據(jù),不處理,向客戶端發(fā)送RST報文,表示客戶端的socket已經(jīng)不存在,不要再發(fā)送數(shù)據(jù)了
      4. 服務(wù)端收到RST報文,關(guān)閉conn socket,重新回到main函數(shù)的while循環(huán)中
      posted @ 2025-09-11 04:33  Guanjie255  閱讀(4)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲成人四虎在线播放| 久久久久久综合网天天 | 国产在线精品一区二区三区| WWW丫丫国产成人精品| 成人国产亚洲精品天堂av| 精品久久久中文字幕一区| 国产精品免费视频不卡| 国产午夜视频在线观看| 人妻18毛片A级毛片免费看 | 91精品午夜福利在线观看| 国产精品第二页在线播放| 日韩av裸体在线播放| 中文字幕av中文字无码亚| 国产肥妇一区二区熟女精品 | 97se亚洲国产综合自在线观看| 国产精品自在拍在线播放| 国产亚洲精品VA片在线播放 | 鲁丝一区二区三区免费| 亚洲国产成人精品无码一区二区 | 欧美日韩精品一区二区三区在线| 欧洲码亚洲码的区别入口| av色国产色拍| 国产精品国产三级国快看| 97超级碰碰碰久久久久| 亚洲美免无码中文字幕在线| 东北妇女精品bbwbbw| 日日碰狠狠添天天爽五月婷| 国产伦码精品一区二区| 洛南县| 伊人久久大香线蕉AV网禁呦| 欧美成本人视频免费播放| 国产中文字幕一区二区| 久久精品国产99精品亚洲| 亚洲制服无码一区二区三区| 武鸣县| 精品国产av无码一区二区三区 | jizzjizz少妇亚洲水多| 天堂俺去俺来也www色官网| 日韩国产成人精品视频| av中文字幕一区二区| 精品无码av无码免费专区|