中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python網絡編程socket如何實現服務端、客戶端

發布時間:2021-05-17 11:28:33 來源:億速云 閱讀:248 作者:小新 欄目:開發技術

這篇文章主要介紹python網絡編程socket如何實現服務端、客戶端,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

本文內容:

  • socket介紹

  • TCP:

    • 服務端

    • 客戶端

  • UDP:

    • 服務端

    • 客戶端

首發時間:2018-02-08 01:14

修改:

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


什么是socket:

  • socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求。

  • 網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。

  • socket就像電話線插口,只有電話線插上了,才能通信。

  • python中使用socket來進行網絡連接傳輸




    TCP:

    服務端:

    TCP服務端一般需要下面幾個操作:建立,綁定IP地址和端口,監聽端口,等待連接,接收數據,傳輸數據 ,關閉連接

    import socket
    server=socket.socket()#建立socket
    server.bind(('localhost',1234))#綁定
    server.listen()#監聽
    print("開始等待。。。")
    conn,addr=server.accept()#接收連接
    print("連接成功")
    data=conn.recv(1024)#接收數據
    print(data.decode())
    conn.send(data)#發送數據
    server.close()#關閉連接
    print("--------------------")

     

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

     

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

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

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

     

    客戶端:

    TCP客戶端一般需要下面幾個操作:建立socket,連接遠程socket,傳輸數據 ,接收數據,關閉連接

    import socket
    client=socket.socket()#建立socket
    client.connect(('localhost',1234))#連接
    client.send("你好".encode())#發送數據
    data=client.recv(1024)#接收數據
    print(data.decode())
    client.close()#關閉連接

     

    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:

    服務端:

    UDP服務端通常有以下幾個操作:創建socket,綁定端口,傳輸數據,接收數據

    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客戶端通常有以下幾個操作:創建socket,傳輸數據,接收數據

    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()

     

    • 創建socket:client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    • 傳輸數據:server.sendto(data,addr),【addr是一個元組,內容為(地址,端口)】

    • 接收數據:data,server_addr=client.recvfrom(1024)

    • 創建socket:server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    • 綁定端口:server.bind(addr),【addr是一個元組,內容為(地址,端口)】

    • 接收數據:data,client_addr=server.recvfrom(1024)

    • 傳輸數據:server.sendto(data,client_addr)

    • 上述代碼存在一個問題:只能發送一次數據,發生完數據就會斷開連接,改成可以多次發送數據,不自動斷開的【前提是服務端能接收多次】:

    • 建立:client=socket.socket()

    • 連接:client.connect(('IP地址',端口)),其中地址和端口號是一個 tuple

    • 傳輸數據:client.send(data),傳輸的數據必須是字節流,所以對字符串數據需要使用encode()

    • 接收數據recv:client.recv(size),傳輸的數據是字節流,如果需要轉成Unicode,需要使用decode()

    • 關閉連接close:close()

    • 上述代碼存在一個問題:只能接受一次連接,連接結束后,服務端socket將關閉,更改成不立即關閉能等待下一個連接的:

    • 建立:server=socket.socket(socket.AF_INET, socket.SOCK_STREAM)  【參數默認就是socket.AF_INET, socket.SOCK_STREAM】

    • 綁定端口:server.bind(('IP地址',端口)),【地址和端口號是一個 tuple 】

    • 監聽:server.listen()

    • 接受連接: conn,addr=server.accept(),返回值是一個連接實例和一個地址,地址是連接過來的客戶端地址,而數據操作要利用這個連接實例

    • 傳輸數據:conn.send(data),【傳輸的數據必須是字節流,所以對字符串數據需要使用encode() 】

    • 接收數據read:conn.recv(size),【傳輸的數據必須是字節流,size是接收的字節數,如果需要轉成Unicode,需要使用decode() 】

    • 關閉連接close:close()

    • 首發需要導入模塊:import socket

    • 然后創建過程在下面

    • 如果使用socket模塊來創建TCP客戶端和服務端:

python的五大特點是什么

python的五大特點:1.簡單易學,開發程序時,專注的是解決問題,而不是搞明白語言本身。2.面向對象,與其他主要的語言如C++和Java相比, Python以一種非常強大又簡單的方式實現面向對象編程。3.可移植性,Python程序無需修改就可以在各種平臺上運行。4.解釋性,Python語言寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序。5.開源,Python是 FLOSS(自由/開放源碼軟件)之一。

以上是“python網絡編程socket如何實現服務端、客戶端”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临泉县| 中卫市| 卓资县| 安宁市| 和静县| 石柱| 丹棱县| 上蔡县| 隆德县| 湟源县| 思茅市| 西丰县| 余江县| 蓝山县| 宁城县| 通榆县| 东兴市| 曲松县| 申扎县| 山阳县| 浪卡子县| 咸宁市| 宜城市| 内乡县| 金乡县| 新密市| 高尔夫| 永靖县| 澄城县| 南平市| 河西区| 新兴县| 房产| 元氏县| 湖南省| 山东| 黄山市| 赤水市| 乐亭县| 秦皇岛市| 修武县|