zoukankan      html  css  js  c++  java
  • UDP网络程序,客户端和服务端交互原理

    创建一个udp客户端程序的流程是简单,具体步骤如下:

    • 创建客户端套接字
    • 发送/接收数据
    • 关闭套接字

    UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

    UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。但UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。

    现在给大家展现一个关于服务端和客户端的交互端口程序代码如下,具体介绍在代码中有详细的注明:

    '''

    socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:

    它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的

    例如我们每天浏览网页、QQ 聊天、收发 email 等等


    '''

    客户端代码:

    from socket import *
    # 发起udp请求 resSocket=socket(AF_INET,SOCK_DGRAM) # 要发送的地址,服务端地址 sendAddr=('192.168.8.195',8888) # 绑定本地端口 # ip地址和端口号,ip一般不用写,表示本机的任何一个ip resSocket.bind(('192.168.8.195',6666)) #发送方也可以绑定 # resSocket.bind(bindAddr) n=10 while n>0: # 4. 发送数据到指定的电脑上 # 第一个参数是二进制对象,要将字符串转换为二进制对象, # 需要使用encode方法,根据对方接收什么编码,进行解码。 sendData = input('请输入客户端要发送的数据:') # sendData要用encode('gbk')编码成byte型 resSocket.sendto(sendData.encode('gbk'), sendAddr) # 接收服务端信息 recvData=resSocket.recvfrom(1024) # 发送的内容recvData[0].decode('gbk')要用decode进行解码,解码的类型和发送端编码类型一致 print('发送方%s,端口号%s:%s'%(recvData[1][0],recvData[1][1],recvData[0].decode('gbk'))) n=n-1 resSocket.close()

    服务端代码:

    from socket import *
    #1. 创建套接字
    # 创建请求协议
    # SOCK_DGRAM表示UDP协议,AF_INET表示ipv4
    udpSocket=socket(AF_INET,SOCK_DGRAM)
    
    
    # 发送/接收数据
    #2. 准备接收方的地址
    # 准备要发送数据到的客户ip地址,即客户端
    sendAddr=('192.168.8.195',6666)
    # 绑定本端口地址,服务端和客户端ip地址可以一样但是端口必须不一样
    udpSocket.bind(('192.168.8.195',8888))
    n=10
    while n>0:
        # 第一时间接收客户端到信息,
        recvData=udpSocket.recvfrom(1024)
        # 输出收到的信息
        print('发送方:%s端口号:%s:%s'%(recvData[1][0],recvData[1][1],recvData[0].decode('gbk')))
        # 3. 从键盘获取数据
        sendData = input('请输入要发送的数据:')
        # 4. 发送数据到指定的电脑上:向客户端发送数据
        udpSocket.sendto(sendData.encode('gbk'), sendAddr)
    
        n=n-1
    # 5关闭请求协议(关闭套接字)
    udpSocket.close()
  • 相关阅读:
    Jmeter逻辑控制器
    python学习笔记——%占位符的使用
    python学习笔记——生成随机数
    python学习笔记——变量的规则
    loadrunner11中HTTP/HTML的HTML-base script的两种script type有什么区别?
    loadrunner11如何实时查看脚本的运行情况?
    loaderunner11回放脚本时如何设置【运行时行为】?
    appium学习笔记之——popupwindow控件元素无法定位
    Chrome、Firefox、IE等浏览器驱动diver程序存放目录
    npm方式安装appium环境所遇到的各种问题
  • 原文地址:https://www.cnblogs.com/Dark-fire-liehuo/p/9762703.html
Copyright © 2011-2022 走看看