python建立udp如何设置本机端口号_学习笔记第2篇之UDP数据的收发

本文以通俗易懂的方式介绍UDP协议的基础知识,包括创建socket、绑定IP和端口、数据收发的过程。通过C#语言解释关键步骤,如SocketType和ProtocolType的含义,以及如何指定远程端点。虽然理论知识看似复杂,但实际实现仅需几行代码,适用于多种编程语言。文章提供服务器端和客户端的代码示例,并鼓励读者动手实践。
摘要由CSDN通过智能技术生成
第2篇我们就直接进入代码的操作啦!需要复习UDP基础知识的朋友可以打开我们上一篇文章的链接↓

《如何通俗的讲解UDP基础知识》

为了让大家都能看懂,代码我尽量注释,让大家能知其然也知其所以然。

87f124316c30576d956d6305250696b4.gif

上一篇我们讲到UDP本质上就是设备之间的数据传输协议,按照一定的规范,设置好对应的信息,把数据发送出去,然后再按照规定好的格式进行接收和解析。

实现流程如下:

     1. 创建socket,并绑定IP地址和端口号

     2. 把数据塞到receive()/send()方法中

     3. 关闭socket

是不是很简单,是不是和把大象装冰箱的步骤几乎雷同! c65862154d8e2bb61cfeb93269c0e8c6.png

这里我们画一下socket的通信过程

27343f97e55062cbba45b263f4e23038.png

如果要说的稍微详细一点的话

a41d52ccfd3135ab389af5b70c59daf3.png

由上图可知建立socket通讯我们需要创建一个服务器端,一个客户端,通俗点儿说就是交流需要两个对象,一个巴掌拍不响。

cbaea6028cf4f99b392af7004b032fea.png

没接触过通讯知识的朋友们是不是觉得上面的知识有点小复杂,看不懂没关系,根本不影响咱们写代码!甚至这篇文章你一个字看得懂都不打紧,只要你会 Control C + Control V, 你就可以当程序猿!因为我们码农的工作实质就是:

ca8ece75dedd3ce10541bd485028a53a.png

下面我们就用C#语言实现试试看!

① 创建一个socket  

Socket newsock = new Socket(

AddressFamily.InterNetwork,

SocketType.Dgram,

ProtocolType.Udp);

Socket方法的这三个参数分别代表什么含义呢?

AddressFamily:指定 Socket 类的实例可以使用的寻址方案,暂时不用管。

SocketType :指定 Socket 类的实例表示的套接字的类型,暂时不用管。

ProtocolType:就是字面意思,协议类型,后面讲TCP和抓包的时候会用上别的协议,这里不管。

你可能会问,那既然什么都不用管,小编写出来干啥呢? 我不是怕你不放心么!那既然这些参数都不用改,我们不写可不可以?那当然也是可以的。这里C#专门有一个UdpClient类来方便大家偷懒。 UdpClient client = new UdpClient(远程端点); 因为UDP属于无 连接通信,意思就是通信的时候不用先给服务器打招呼,就只顾自己往外发数据,别人收不收得到根本不care,同时别人收到数据了也不会反馈。 尽管UdpClient这个类叫Client,我们也 可以用其创建服务器端程序。

fcc6c8aff50953ef334a9f4607901719.png

② 实例化一个远程端点

意思就是要指定IP地址和端口号,比如:

IPEndPoint  remotePoint = new  IPEndPoint  ( IPAddress .Parse ("127.0.0.1"),  5555);

这里“127.0.0.1”就是本机的IP地址,就是让计算机自己发给自己。

③ 发送/接收数据

发送:

client.Send(sendData, sendData.Length, remotePoint);

接收:

receiveData = client.Receive(ref remotePoint);

④ 关闭socket

client.Close();

没了,核心代码就不超过5行!理解了这5行就能实现UDP的收发了。那我为啥啰啰嗦嗦说这么一大堆呢,因为只有理解了理论知识,大家才不会局限于编程语言,有时间我会给大家讲讲C/C++, Matlab/Simulink, Python不同语言中,UDP收发是怎么实现的。大家可以猜猜看哪种方式最简单。

fe21eb13f31ad8ac6364110b394d0d30.png

那我们把所有代码都写出来

服务器端:

01af0f76182c425e42c29341a8f4330d.png

客户端:

82ba6fe9d71ab6ef9bc3a42f665b192e.png

测试结果:

b8d1760be42a03ff7a4d1c686242ebc2.png

大家都可以自己试试,下次有时间统一上传一下源代码。

0dd2f25bd48e196c97906dd19c2b537e.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值