最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python網(wǎng)絡(luò)編程socket實現(xiàn)服務(wù)端、客戶端操作詳解

 更新時間:2020年03月24日 09:02:22   作者:隨風(fēng)行云  
這篇文章主要介紹了python網(wǎng)絡(luò)編程socket實現(xiàn)服務(wù)端、客戶端操作,結(jié)合實例形式分析了python基于socket實現(xiàn)服務(wù)端、客戶端相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下

本文實例講述了python網(wǎng)絡(luò)編程socket實現(xiàn)服務(wù)端、客戶端操作。分享給大家供大家參考,具體如下:

本文內(nèi)容:

  • socket介紹
  • TCP:
    • 服務(wù)端
    • 客戶端
  • UDP:
    • 服務(wù)端
    • 客戶端

首發(fā)時間:2018-02-08 01:14

修改:

  1. 2018-03-20 :重置了布局,增加了UDP

什么是socket:

  • socket又稱"套接字",應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。
  • 網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個socket。
  • socket就像電話線插口,只有電話線插上了,才能通信。
  • python中使用socket來進(jìn)行網(wǎng)絡(luò)連接傳輸


    TCP:

    • 如果使用socket模塊來創(chuàng)建TCP客戶端和服務(wù)端:
      • 首發(fā)需要導(dǎo)入模塊:import socket
      • 然后創(chuàng)建過程在下面

    服務(wù)端:

    TCP服務(wù)端一般需要下面幾個操作:建立,綁定IP地址和端口,監(jiān)聽端口,等待連接,接收數(shù)據(jù),傳輸數(shù)據(jù) ,關(guān)閉連接

    • 建立:server=socket.socket(socket.AF_INET, socket.SOCK_STREAM)  【參數(shù)默認(rèn)就是socket.AF_INET, socket.SOCK_STREAM】
    • 綁定端口:server.bind(('IP地址',端口)),【地址和端口號是一個 tuple 】
    • 監(jiān)聽:server.listen()
    • 接受連接: conn,addr=server.accept(),返回值是一個連接實例和一個地址,地址是連接過來的客戶端地址,而數(shù)據(jù)操作要利用這個連接實例
    • 傳輸數(shù)據(jù):conn.send(data),【傳輸?shù)臄?shù)據(jù)必須是字節(jié)流,所以對字符串?dāng)?shù)據(jù)需要使用encode() 】
    • 接收數(shù)據(jù)read:conn.recv(size),【傳輸?shù)臄?shù)據(jù)必須是字節(jié)流,size是接收的字節(jié)數(shù),如果需要轉(zhuǎn)成Unicode,需要使用decode() 】
    • 關(guān)閉連接close:close()
    import socket
    server=socket.socket()#建立socket
    server.bind(('localhost',1234))#綁定
    server.listen()#監(jiān)聽
    print("開始等待。。。")
    conn,addr=server.accept()#接收連接
    print("連接成功")
    data=conn.recv(1024)#接收數(shù)據(jù)
    print(data.decode())
    conn.send(data)#發(fā)送數(shù)據(jù)
    server.close()#關(guān)閉連接
    print("--------------------")
    • 上述代碼存在一個問題:只能接受一次連接,連接結(jié)束后,服務(wù)端socket將關(guān)閉,更改成不立即關(guān)閉能等待下一個連接的:
    #服務(wù)器端
    import socket
    server = socket.socket()
    server.bind(('localhost',1234)) #綁定ip和端口
    server.listen(5) #監(jiān)聽
    while True:
      print("開始等待")
      conn, addr = server.accept()
      print(conn, addr)
      print("客戶端連接")
      while True:
        data = conn.recv(1024)
        print("recv:",data)
        if not data: #當(dāng)data=0時為真
          print("連接斷開...")
          break
        conn.send(data)
    server.close()

    注:上述代碼中在linux中正常運行,在windows中會報錯!

    如果要在windows中運行,需要捕獲異常:

    #服務(wù)器端
    import socket
    server = socket.socket()
    server.bind(('localhost',1234)) #綁定ip和端口
    server.listen(5) #監(jiān)聽
    while True:
      print("開始等待")
      conn, addr = server.accept()
      print(conn, addr)
      print("客戶端連接")
      while True:
        try:
          data = conn.recv(1024)
          print("recv:",data)
          if not data: #當(dāng)data=0時為真
            print("連接斷開...")
            break
          conn.send(data)
        except ConnectionResetError as e:
          print(e)
          break
    server.close()

    客戶端:

    TCP客戶端一般需要下面幾個操作:建立socket,連接遠(yuǎn)程socket,傳輸數(shù)據(jù) ,接收數(shù)據(jù),關(guān)閉連接

    • 建立:client=socket.socket()
    • 連接:client.connect(('IP地址',端口)),其中地址和端口號是一個 tuple
    • 傳輸數(shù)據(jù):client.send(data),傳輸?shù)臄?shù)據(jù)必須是字節(jié)流,所以對字符串?dāng)?shù)據(jù)需要使用encode()
    • 接收數(shù)據(jù)recv:client.recv(size),傳輸?shù)臄?shù)據(jù)是字節(jié)流,如果需要轉(zhuǎn)成Unicode,需要使用decode()
    • 關(guān)閉連接close:close()
    import socket
    client=socket.socket()#建立socket
    client.connect(('localhost',1234))#連接
    client.send("你好".encode())#發(fā)送數(shù)據(jù)
    data=client.recv(1024)#接收數(shù)據(jù)
    print(data.decode())
    client.close()#關(guān)閉連接
    • 上述代碼存在一個問題:只能發(fā)送一次數(shù)據(jù),發(fā)生完數(shù)據(jù)就會斷開連接,改成可以多次發(fā)送數(shù)據(jù),不自動斷開的【前提是服務(wù)端能接收多次】:
    import socket
    client=socket.socket()
    client.connect(('localhost',1234))
    while True:
      cmd=input(">>")
      if len(cmd)==0:
        continue
      client.send(cmd.encode())
      cmd_res=client.recv(1024)
      print(cmd_res.decode())
    client.close()


    UDP:

    服務(wù)端:

    UDP服務(wù)端通常有以下幾個操作:創(chuàng)建socket,綁定端口,傳輸數(shù)據(jù),接收數(shù)據(jù)

    • 創(chuàng)建socket:server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    • 綁定端口:server.bind(addr),【addr是一個元組,內(nèi)容為(地址,端口)】
    • 接收數(shù)據(jù):data,client_addr=server.recvfrom(1024)
    • 傳輸數(shù)據(jù):server.sendto(data,client_addr)
    import socket
    import time
    server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    server.bind(("localhost",1234))
    start_time=time.time()
    while True:
      data,addr=server.recvfrom(1024)
      print(data,addr)
      server.sendto("hello".encode(),addr)
      time.sleep(1)
      if time.time()-start_time>30:
        break
    server.close()

    客戶端:

    UDP客戶端通常有以下幾個操作:創(chuàng)建socket,傳輸數(shù)據(jù),接收數(shù)據(jù)

    • 創(chuàng)建socket:client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    • 傳輸數(shù)據(jù):server.sendto(data,addr),【addr是一個元組,內(nèi)容為(地址,端口)】
    • 接收數(shù)據(jù):data,server_addr=client.recvfrom(1024)
    import socket,time
    client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    addr=("localhost",1234)
    start_time=time.time()
    while True:
      client.sendto(time.ctime().encode(),addr)
      data,addr= client.recvfrom(1024)
      print(data)
      time.sleep(1)
      if time.time()-start_time>30:
        break
    client.close()

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • Python按條件篩選、剔除表格數(shù)據(jù)并繪制剔除前后的直方圖(示例代碼)

    Python按條件篩選、剔除表格數(shù)據(jù)并繪制剔除前后的直方圖(示例代碼)

    本文介紹基于Python語言,讀取Excel表格文件數(shù)據(jù),以其中某一列數(shù)據(jù)的值為標(biāo)準(zhǔn),對于這一列數(shù)據(jù)處于指定范圍的所有行,再用其他幾列數(shù)據(jù)的數(shù)值,加以數(shù)據(jù)篩選與剔除,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • python中map()與zip()操作方法

    python中map()與zip()操作方法

    這篇文章主要介紹了python中map()與zip()操作方法,需要的朋友可以參考下
    2016-02-02
  • python通過ftplib登錄到ftp服務(wù)器的方法

    python通過ftplib登錄到ftp服務(wù)器的方法

    這篇文章主要介紹了python通過ftplib登錄到ftp服務(wù)器的方法,涉及Python使用ftplib模塊的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 使用Python更換外網(wǎng)IP的方法

    使用Python更換外網(wǎng)IP的方法

    這篇文章主要介紹了使用Python更換外網(wǎng)IP的方法,,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python?Pipeline處理數(shù)據(jù)工作原理探究

    Python?Pipeline處理數(shù)據(jù)工作原理探究

    如果你是一個Python開發(fā)者,你可能聽過"pipeline"這個術(shù)語,但?pipeline?到底是什么,它又有什么用呢?在這篇文章中,我們將探討?Python?中的?pipeline?概念,它們是如何工作的,以及它們?nèi)绾螏椭憔帉懜逦?、更高效的代碼
    2024-01-01
  • Python實現(xiàn)彈球小游戲的示例代碼

    Python實現(xiàn)彈球小游戲的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Python如何實現(xiàn)簡單的彈球小游戲,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2022-11-11
  • Python編程中的異常處理教程

    Python編程中的異常處理教程

    這篇文章主要介紹了Python編程中的異常處理教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • Python實現(xiàn)的飛速中文網(wǎng)小說下載腳本

    Python實現(xiàn)的飛速中文網(wǎng)小說下載腳本

    這篇文章主要介紹了Python實現(xiàn)的飛速中文網(wǎng)小說下載腳本,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • Python3.9.1中使用match方法詳解

    Python3.9.1中使用match方法詳解

    這篇文章主要介紹了Python3.9.1中使用match方法詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 詳解python中的hashlib模塊的使用

    詳解python中的hashlib模塊的使用

    這篇文章主要介紹了python中的hashlib模塊的使用,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-04-04

最新評論

西峡县| 河北省| 桃源县| 兴隆县| 瑞金市| 龙南县| 黄冈市| 安新县| 太保市| 奉化市| 镇赉县| 漳平市| 潞城市| 社旗县| 河津市| 日土县| 南丰县| 冀州市| 兴义市| 沭阳县| 石景山区| 新建县| 定远县| 渝北区| 丹凤县| 东明县| 娄烦县| 隆林| 崇礼县| 江陵县| 新津县| 清水河县| 通州区| 水城县| 通化市| 股票| 株洲县| 子洲县| 肇州县| 桂阳县| 庆安县|