zoukankan      html  css  js  c++  java
  • udp服务端收发数据流程

    1、创建服务端的socket以便开始通讯。
    2、绑定ip以及端口号,这样客户端才能找到这个程序。
    3、因为本地网卡不止一个所以尽量不写死,一般用""空来表示所有本地网卡。
    4、接下来开始通过绑定的ip以及端口开始监听消息,设置最大接收1024字节消息,以防文件过大,占满网络缓存区。
    5、收到消息之后,这时候就收到了客户端发送过来的ip以及端口,然后也可以再通过这个ip以及端口回发消息。
    6、收到消息的时候,先确定客户端的编码形式是utf-8还是gbk,并且用同样的方式把字节码解码成能看懂的数据。
    7、在进行回发的时候,要首先对要发送的数据进行编码,转换成对应的字节码发送。
    8、最后一步就是关闭服务端,一般不做关闭,关闭软件即关闭服务端。
    9、在用线程,进程,进程池的时候可实现消息收发的并行,协程的时候可实现伪并行,原理就是方法之间切换。
    10、协程可使用封装好的框架,greenlet以及gevent框架来操作。
    11、在服务端循环进行消息阻塞(接收消息)的时候,这里跟tcp不同,不需要每次使用时重用或者是释放所绑定端口。
    12、tcp在四次挥手以后还要等待客户端一分钟左右才会释放端口,udp属于突发通讯,来即收,挥即去。
    13、所以在这里并不需要立马再次重用这个端口。
    from socket import *
    # 服务端
    
    # 建立服务端socket
    socket_serve = socket(AF_INET, SOCK_DGRAM)
    # 确定本地端口,可能多个,所以不限
    local_port = ('', 8989)
    # 绑定本地端口
    socket_serve.bind(local_port)
    
    while True:
        # 本地端口监听客户端数据(接收数据)
        socket_temp_serve_data = socket_serve.recvfrom(1024)
        # 数据解码
        socket_serve_data = socket_temp_serve_data[0].decode('gbk')
        # 打印接受到的数据
        print(socket_serve_data)
        # 用户输入数据并对客户端发送
        socket_serve_sendto_temp_data = input('服务端:')
        #对用户输入的数据进行编码
        socket_serve_sendto_temp_data = '服务端:' + socket_serve_sendto_temp_data
        socket_serve_sendto_data = socket_serve_sendto_temp_data.encode('gbk')
        # 传输数据给客户端
        socket_serve.sendto(socket_serve_sendto_data, socket_temp_serve_data[1])
    # 关闭socket服务端
    # socket_serve.close()
    

      

                                                                       -------  知识无价,汗水有情,如需搬运请注明出处,谢谢!

  • 相关阅读:
    Java 8 Lambda 表达式
    OSGi 系列(十二)之 Http Service
    OSGi 系列(十三)之 Configuration Admin Service
    OSGi 系列(十四)之 Event Admin Service
    OSGi 系列(十六)之 JDBC Service
    OSGi 系列(十)之 Blueprint
    OSGi 系列(七)之服务的监听、跟踪、声明等
    OSGi 系列(六)之服务的使用
    OSGi 系列(三)之 bundle 事件监听
    OSGi 系列(三)之 bundle 详解
  • 原文地址:https://www.cnblogs.com/wf-skylark/p/9008085.html
Copyright © 2011-2022 走看看