基于UDP实现的socket通信

【1】TCP和UDP的区别

Tcp 是 面向连接的 可靠的 流式服务
所以Tcp 需要进行三次握手建立连接后,才可以传输用户数据,可靠性是通过应答确认、超时重传机制等保证,还有滑动窗口来进行流量控制。
Udp 是 无连接 不可靠 数据报服务
所以UDP不需要进行三次握手来建立连接,直接发送数据,不保证可靠交付,不管对方收到还是没有收到。

【2】TCP和UDP的编程流程

在这里插入图片描述在这里插入图片描述

【3】函数sendto()和recvfrom()

函数原型:

#include <sys/types.h>
#include <sys/socket.h>

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
            struct sockaddr *src_addr, socklen_t *addrlen);
            
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
           const struct sockaddr *dest_addr, socklen_t *addrlen);

参数:
sockfd :标识一个已连接套接口的描述字
buf :接收数据缓冲区/发送数据缓冲区
len :缓冲区长度
flags :调用操作方式,flags参数以及返回值的含义与send/recv系统调用的flags参数及返回值相同
src_addr指针指向装有源地址的缓冲区(若是面向连接的socket编程,则可以省略这个参数,因为已经建立了连接,所以我们已经知道接收谁的数据,知道它的地址)
dest_addr指针指向装有目标地址的缓冲区(若是面向连接的socket编程,则可以省略这个参数,因为已经建立了连接,所以我们已经知道要发送给谁,并且知道他的地址)
addrlen指针 :指向地址缓冲区长度值

【4】代码示例

实现客户端服务器交互
server.c

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值