最新消息:

Linux Socket 学习笔记10-面向非连接的协议(UDP)

Linux admin 3044浏览 0评论

UDP协议相对于TCP/IP协议主要有下面几个优点:

  1. 简单:不需要建立连接。
  2. 灵活:每一次的消息都可以发送给不同的人。
  3. 高效:没有复杂的“三次握手”。
  4. 具有广播能力:一个消息可以同时发给多个接收者。

当然,它也有显著的缺点:

  1. 不可靠。
  2. 信息无序性。
  3. 消息的大小有限制。

在具体实现UDP连接之前,先看看下面两个函数:

  • sendto(2)用来将数据由指定的socket传给对方主机。

定义:

#include < sys/types.h >
#include < sys/socket.h >
int sendto ( int s ,const void * msg,int len, unsigned int flags,conststruct sockaddr * to , int tolen ) ;

参数说明:
参数s为已建好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据内容,参数flags 一般设0。参数to用来指定欲传送的网络地址。参数tolen为sockaddr的结果长度。
返回值
成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。

  • recvfrom(2)用来接收远程主机经指定的socket 传来的数据。

定义:
#include<sys/types.h>
#include<sys/socket.h>
int recvfrom(int s,void *buf,int len,unsigned int flags ,struct sockaddr *from ,int *fromlen);

参数说明:
接收数据存到由参数buf 指向的内存空间,参数len 为可接收数据的最大长度。参数flags 一般设0。参数from用来指定欲传送的网络地址。参数fromlen为sockaddr的结构长度。

返回值:
成功则返回接收到的字符数,失败则返回-1,错误原因存于errno中。

转载请注明:爱开源 » Linux Socket 学习笔记10-面向非连接的协议(UDP)

您必须 登录 才能发表评论!