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()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java Edge

分布式服务框架 Zookeeper安装和配置详解单机模式集群模式数据模型如何使用常用接口列表org.apache.zookeeper. ZooKeeper 方法列表基本操作ZooKeeper 典型的应

2814
来自专栏数据和云

浅谈TimesTen内存数据库的结构

作者介绍 ? 朱亮 云和恩墨技术专家,6年专职oracle dba生涯先后服务于保险、金融、电信、百货等客户 Oracle TimesTen In-Memor...

2758
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第三十三天 MongoDB初级学习

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。

722
来自专栏大大的微笑

初识ActiveMQ

①.消息传递方式介绍: Activemq支持两种方式的消息传递:     广播模式:1-n的方式,是一种发布订阅模式,像腾讯新闻那样,只要我们微信关注了腾讯新闻...

4707
来自专栏技术墨客

read-through,write-through与write-behind模式

在hazelcast的官方文档中,提到了其支持read-through,write-through与write-behind三种模式。查阅资料,最后在oracl...

661
来自专栏蓝天

Tcpdump 的用法

更新时间:2005-12-26 11:55 阅读提示:第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指...

954
来自专栏Java技术栈

紧急整理了 20 道 Spring Boot 面试题,我经常拿来面试别人!

面试了一些人,简历上都说自己熟悉 Spring Boot, 或者说正在学习 Spring Boot,一问他们时,都只停留在简单的使用阶段,很多东西都不清楚,也让...

183
来自专栏个人分享

Spark数据传输及ShuffleClient(源码阅读五)

  我们都知道Spark的每个task运行在不同的服务器节点上,map输出的结果直接存储到map任务所在服务器的存储体系中,reduce任务有可能不在同一台机器...

633
来自专栏韩伟的专栏

状态模式:一个Epoll边缘触发的代理服务器设计

设计模式是一门热门的知识,但是何时应该用哪个,却往往不容易掌握,本文以一个Socks5代理服务器的设计为例,介绍状态模式的实践用法。 软件的功能介绍 提供Soc...

3757
来自专栏马洪彪

Java设计模式(三)单例模式

一、场景描述 在采集到仪器数据后,需要将数据发送到lims系统中,通过调用lims系统服务实现数据的上传。 在仪器数据采集组件中实现lims系统服务代理,该代理...

3196

扫码关注云+社区