网络编程 基础 基于socket的tcp和udp连接

本文探讨了网络开发中的C/S与B/S架构,详细介绍了BS架构如何统一程序入口,并深入解析了TCP与UDP协议下socket通信的具体实现,包括文件传输和消息交换的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络开发的框架

  • C/S B/S 架构

    • 程序都是bs架构的程序(b指浏览器,s指服务器)
    • c(client)是客户端,s(server)是服务器
    • bs架构是cs架构的一种
    • 未来的趋势,
      • pc端bs架构,统一了程序的入口
      • 手机端 微信公众号,统一了程序的入口
  • socket

    • 起一个tcp协议的socket进行通信
      1436951-20180913202945275-214322394.png

      • # 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进行通信
      1436951-20180913203010264-1819146512.png

    • # 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()                                     #关闭端口

转载于:https://www.cnblogs.com/yuncong/p/9642633.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值