網絡編程 基礎 基於socket的tcp和udp鏈接

網絡開發的框架

  • C/S B/S 架構

    • 程序都是bs架構的程序(b指瀏覽器,s指服務器)
    • c(client)是客戶端,s(server)是服務器
    • bs架構是cs架構的一種
    • 將來的趨勢,
      • pc端bs架構,統一了程序的入口
      • 手機端 微信公衆號,統一了程序的入口
  • socket

    • 起一個tcp協議的socket進行通訊
      python

      • # tcp協議
        #客戶端
        # import socket
        # rev = socket.socket()
        # # rev.bind(("ip地址",端口號))      #端口號通常取8000- 9999
        # rev.listen()            #開啓服務端
        # 
        # msg,addr = rev.accept()     #三次握手過程,顯示鏈接服務端的用戶端地址
        # msg.send("你好".encode("utf-8"))  #給用戶端發消息,須要進行編碼
        # mv = msg.recv(1024)         #接受用戶端回的消息,限制一次接受的最大字節
        # print(mv.decode("utf-8"))   #打印接受到的消息,須要解碼
        # msg.close()                 #關閉用戶端的鏈接
        # rev.close()                 #關閉服務端
        # 用戶端
        # import socket
        # cli = socket.socket()
        # cli.connect(("ip地址",端口號))   #鏈接服務端
        # msg = cli.recv(1024)              #接收信息
        # print(msg.decode("utf-8"))        #打印消息
        # mv = input("》》》》》:")
        # cli.send(mv.encode("utf-8"))        #發消息
        # cli.close()                     #關閉用戶端

        利用端口傳輸視頻瀏覽器

        import socket
        rev = socket.socket()
        rev.bind(("127.0.0.1",8989))
        rev.listen()
        
        conn,addr = rev.accept()
        filname = conn.recv(1024)
        
        with open(filname.decode("utf-8"),"wb") as f:
            while True:
                content = conn.recv(1024)
                if content == b"ok":break
                f.write(content)
        print("接收完畢")
        conn.close()
        rev.close()
        
        import time
        import os
        import socket
        cli = socket.socket()
        cli.connect(("127.0.0.1",8989))
        cli.send("file".encode("utf-8"))
        time.sleep(0.1)
        size = os.path.getsize("file")
        with open("file","rb") as f:
            while size:
                content = f.read(1024)
                size -= len(content)
                cli.send(content)
            cli.send(b"ok")
            print("傳輸完畢")
            cli.close()
    • 起一個udp協議的socket進行通訊
      服務器

    • # udp協議
      # import socket
      # rev = socket.socket(type=socket.SOCK_DGRAM)
      # rev.bind(("ip地址",端口號))
      #
      # msg,addr = rev.recvfrom(1024)   #接收到的消息
      # print(msg.decode("utf-8"))
      # rev.sendto("你好".encode("utf-8",addr))   #發消息,須要對方的ip地址
      # rev.close()                                 #關閉端口
      
      # import socket
      # cli = socket.socket(type=socket.SOCK_DGRAM)
      # cli.sendto("信息".encode("utf-8"),("ip地址",端口號))   #發消息
      # mv,addr = cli.recvfrom(1024)                    #接收信息和ip地址
      # print(mv.decode("utf-8"))                       #打印信息
      # cli.close()                                     #關閉端口
相關文章
相關標籤/搜索