IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> UDP网络编程 -> 正文阅读

[网络协议]UDP网络编程

目录

UDP

?UDP编程流程

代码实现


UDP

UDP提供的是无连接,不可靠,数据报服务。

“无连接”是指UDP不同于TCP协议,UDP不用建立连接。因此客户端每次发送数据都要明确指定接收端的地址

“不可靠”,意味着UDP协议无法保证数据从发送端正确地传送到目的端。如果数据在中途丢失,或者因为校验错误被丢弃,UDP只是简单的通知应用程序发送失败;

基于数据报的服务,指每个UDP数据都要有一个长度,接收端读取时必须设置不小于该长度的单位并一次性读出,否则会导致数据缺失,在下一个数据报发来时,上一个数据就会被截断。

?关于TCP和UDP的对比从下图可以直观的看出:

?UDP编程流程

关于这些函数的具体介绍可以参考TCP编程那一篇博客。

代码实现

服务端:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>

int main()
{
    int sockfd = socket(AF_INET ,SOCK_DGRAM,0);
    assert(sockfd != -1);
    struct sockaddr_in saddr,caddr;
    memset(&saddr,0,sizeof (saddr)) ;
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6000);
    saddr.sin_addr.s_addr = inet_addr( "127.0.0.1" );
    int res = bind (sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
    assert(res != -1 );
    while( 1 )
    {
        int len = sizeof (caddr);
        char buff [128] = {0};
        recvfrom( sockfd,buff,127,0, (struct sockaddr*)&caddr,&len);
        printf ( "buff=%s \n" , buff );
        sendto( sockfd ,"ok",2,0, (struct sockaddr*)&caddr,sizeof( caddr));
    }
}

客户端:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>

int main()
{
    int sockfd = socket(AF_INET,SOCK_DGRAM,0);
    assert( sockfd != -1 );
    struct sockaddr_in saddr,caddr;
    memset (&saddr,0,sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6000);
    saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    while(1)
    {
        char buff[128] = {0};
        printf("input:\n");
        fgets (buff,128,stdin);
        if (strncmp(buff,"end",3) == 0)
        {
            break;
        }
        sendto(sockfd,buff,strlen(buff)-1,0,(struct sockaddr*)&saddr,sizeof(saddr));
        memset(buff,0,128);
        int len = sizeof(caddr);
        recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);
        printf("buff=%s\n",buff);
    }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:36:04  更:2021-12-26 22:38:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/6 13:27:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码