UDP '连接'

UDP是面向非连接服务的,但UDP中也可以使用connect函数

 

1)。连接的建立

程序使用connect函数实现UDP的连接套接字,用法秘TCP相同,但实现效果不一样。UDP中的connect不会启动三次握手,而仅仅是在UDP套接字中记住目的地址和端口,如果以后这个套接字上的数据发送没有指定端口和目的地址,则使用connect中设置的目的地址和端口,如果指定的目的地址的端口,则仍用指定信息来填写UDP头部;

 

2)。sendrecv函数

#include<sys/types.h>

#include<sys/socket.h>

int send(int sockfd, void * msg, int msglen, int flags);

int recv(int sockfd, void * buf, int buflen, int flags);

函数使用和sendtorecvfrom一样,只是不用指定目的地址和端口;

 

说明:

对于连接套接字我们也可以用sendto来发送数据报组非缺省的目的地址,但是通过recvfrom只能接收来自指定目的地址的数据报,因为来自其它地址的数据报在UDP层被过滤掉了;

 

3)。连接和重设和取消

   struct sockaddr_in serv_addr1, serv_addr2;

   int udpfd;

   /*设置地址操作*/

   connect(udpfd, (struct socdaddr *)&serv_addr1, sizeof(serv_addr1));

   发送数据操作

   connect(udpfd, (struct socdaddr *)&serv_addr2, sizeof(serv_addr2));

 

4)。数据报发送后的几种可能及错误信息

   a)。数据报在网络中由于字节发生错误而丢失,OR路由器缓冲区满丢失,这种情部发送端不会收到任何错误信息。

   b)。数据报由于主机不可达而丢失。这种情况如果经过了路由器,则路由器发回ICMP报文,通知发送端数据报不可达;如果此时发送正在执行系统调用,则系统调用将以ENETUNREACH EHOSTUNREACH错误返回;

   C)。数据报到达目的主机,但目的主机指定端口上没有进程在接收数据,此时UDP将丢弃这个数据报,将返回ICMP错误报文;

   d)。数据到达目的主机,但目的主机缓冲区满,则没有任何返回结果;

   e)。发送成功,且接收成功;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值