• TCP与UDP协议


    一.网络编程

    1.为什么要学习网络编程

    应用软件的架构

      1.C/S

        client =====server

      2.B/S

        browser ===server

      在不同的计算机上 一个安装客户端 另一个安装服务端 通过网络来通讯

      

      什么是网络通讯?

      要完成通讯必须具备的条件

        1.物理链接介质(网络,WIFI,光纤)

        2.必须遵循相同的标准

       在计算机网络中同样需要具备这两个条件

       作为应用软件开发者 不需要关心第一步  重点是通讯的标准(通讯的协议)

        网络协议:

        open system interconnection

        OSI七层模型

    二 socket

    学习网络编程 其实就在学socket

    socket是什么?

      翻译过来称为套接字

      是对底层 TCP IP UDP 等网络协议进行封装

      使得上层的应用程序开发者,不用直接接触者对复杂,丑陋的协议

    在程序的言轮,他就是一个封装好的模板!

    要完成网络通讯,只需要使用系统提供socket模块就行

    TCP和UDP是传输层最常见的协议

    主要控制传输数据的方式

    TCP的传输方式

      优点:通过三次握手来与服务器建立连接

        可以保证数据的完整性

          a机器给b机器发送数据包  要求b机器必须立即返回一个确认包

          a机器会等待一段时间,如果超时还没有收到确认,则重发数据

      缺点:传输效率低

      使用场景:文字聊天,支付宝转账等,

    UDP

      传输方式:不需要建立连接,直接发送

      缺点: 不能保证数据的完整性

      优点: 传输效率比TCP高

      使用场景:视频通话,语音通话,UDP

    python的socket

    在使用socket的时候用户需要关系的是 ip地址,port端口,传输协议TCP/UDP,你要发送的数据data

    在写网络编程的时候,必须有两代码,对应客户端的服务器

    使用sockett来完成TCP通讯

      应该先完成服务器的代码编写

    三 TCP服务器

    import socket
    #1.创建一个代表服务器的socket对象
    s = socket.socket()
    
    #2.绑定端口号和IP地址
    1227.0.0.1表示当前这个电脑的ip
    address = ("127.0.0.1",8080)
    s.bind(address)
    print('服务器已启动!')
    
    #3.开始监听这个端口
    #5表示 可以有5个处于半连接状态的连接  指的不是最大连接数
    s.listen(5)
    print("test")
    
    #4.接受连接请求
    #该函数时阻塞的 会卡主程序的执行,必须等到有一个客户端进来才能继续执行
    #返回元组  第一个代表客户端的socket对象  第二客户端的地址信息
    client,c_address = s.accept()
    print("有一个连接已建立!")
    print(c_address)
    #给客户端发送数据
    
    #5.读写数据
    #接受数据
    res = client.recv(1024)
    print(res)
    #6.关闭连接
    s.close()

    四.TCP客户端

    import socket
    
    # 1.创建客户端的socket对象
    c = socket.socket()
    
    # 2.指定服务器的ip和port
    server_address = ("127.0.0.1",8080)
    
    # 3.建立连接
    c.connect(server_address)
    
    # 4.读写数据
    # 发送数据到服务器
    c.send("hello 我是客户端!".encode("utf-8"))
    
    # 5.关闭连接
    c.close()

    五.UDP服务器

    import socket

    1.创建sockket对象

    s = socket.socket(type=socket.SOCK_DGRAM)

    2.绑定端口和ip

    s.bind("127.0.0.1",10000))

    while True:

      3.接受数据

      res = s.recv(1024)

    while True:

      msg = input(">>>>")

      需要获取对方的ip和端口

      s.sendto(msg.ecode("utf-8"),("127.0.0.1",10000))

    #关闭资源

    s.close()

    六 UDP客户端

    import socket
    # 1.创建socket对象
    c = socket.socket(type=socket.SOCK_DGRAM)
    while True:
        msg = input(">>>:")
        c.sendto(msg.encode("utf-8"),("127.0.0.1",10000))
    
    c.close()

    七.聊天的客户端

    import socket
    
    client = socket.socket()
    
    client.connect(("127.0.0.1",65535))
    
    while True:
        # 发送
        client.send(input(">>>:").encode("utf-8"))
    
        # 接收
        data = client.recv(1024).decode("utf-8")
        print(data)
        if len(data) == 0:
            client.close()
            break

    七.聊天服务器

    """
        正常的聊天的程序  客户端发送的数据 先发送到服务器端  服务器端把消息转发给你的目标好友
    
    
    """
    
    import socket
    
    server = socket.socket()
    server.bind(("127.0.0.1",65535))
    server.listen(5)
    
    client, c_address = server.accept()
    
    while True:
        data = client.recv(1024).decode("utf-8")
        print("收到来自客户端的数据:",data)
        # 如果对方发来一个over 我就关闭连接
        if data == "over":
            client.close()
            break
        # 把对方传过来的数据转换为大写 在发回去!
        client.send(data.upper().encode("utf-8"))
    
    # 关闭服务器端
    server.close()
    
    # 需求 客户端输入cmd命令 发送给服务器执行  服务器执行(subprocess)完后返回 执行结果
  • 相关阅读:
    使用JSON.NET实现对象属性的格式化的自定义
    AspNetCore项目-Service注入或覆盖
    发布Nuget
    收藏
    工具
    快捷键大全
    SqlServer分页查询语句
    面试相关
    Eratosthes algrithm 求素数
    code training
  • 原文地址:https://www.cnblogs.com/gongcheng-/p/9898369.html
Copyright © 2020-2023  润新知