参考博客:https://www.cnblogs.com/skyfsm/p/6287787.html

简单编写了 udp的小程序,udp_client 端通过终端输入字符,然后发送给udp_server。udp_server 接收到后,给udp_client一个响应。

//socket udp 客户端
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h> int main()
{
//创建socket对象
int sockfd=socket(AF_INET,SOCK_DGRAM,);
if(- == sockfd)
{
printf("socket failed.\n");
} //创建网络通信对象
struct sockaddr_in ser_addr;
memset(&ser_addr, , sizeof(ser_addr));
ser_addr.sin_family =AF_INET;
ser_addr.sin_port = htons();//htons(1324);
ser_addr.sin_addr.s_addr = inet_addr("192.168.7.224"); // inet_addr("127.0.0.1"); while()
{
printf("Please input a char:");
char cChar;
int num = ;
char buf[];
scanf("%c",&cChar);
getchar();
num = sendto(sockfd, &cChar, sizeof(char), , (struct sockaddr*)&ser_addr, sizeof(ser_addr));
printf("client send %d bytes: %c.\n", num, cChar); memset(buf, , sizeof(buf));
num = recvfrom(sockfd,buf,sizeof(buf), , NULL, NULL);
printf("client recv %d bytes: %s.\n\n", num, buf);
} close(sockfd); }
//socket udp 服务端
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h> #define INVALID_VALUE -1
#define INVALID_SOCKET -1 int main()
{
int ret = -; //创建socket对象
int sockfd=socket(AF_INET,SOCK_DGRAM,); // AF_INET:IPV4;SOCK_DGRAM:UDP
if(INVALID_SOCKET == sockfd)
{
printf("socket failed.\n");
} //创建网络通信对象
struct sockaddr_in ser_addr;
bzero(&ser_addr, sizeof(ser_addr));
ser_addr.sin_family =AF_INET;
ser_addr.sin_port = htons(); //端口号,需要网络序转换
ser_addr.sin_addr.s_addr= htonl(INADDR_ANY); //IP地址,需要进行网络序转换,INADDR_ANY:本地地址 //绑定socket对象与通信链接
ret =bind(sockfd,(struct sockaddr*)&ser_addr,sizeof(ser_addr));
if(>ret)
{
printf("bind error \n");
return -;
} char buf[]; //接收缓冲区,1024字节
int count;
struct sockaddr_in clent_addr; //clent_addr用于记录发送方的地址信息
socklen_t len = sizeof(clent_addr);; while()
{
memset(buf, , sizeof(buf));
count = recvfrom(sockfd, buf, sizeof(buf), , (struct sockaddr*)&clent_addr, &len); //recvfrom是拥塞函数,没有数据就一直拥塞
printf("server recv %d bytes: %s \n",count, buf); memset(buf, , sizeof(buf));
snprintf(buf, sizeof(buf), "%s %d %s", "recive", count, "bytes");
printf("server send string:%s \n", buf);
sendto(sockfd, buf, sizeof(buf), , (struct sockaddr*)&clent_addr, len); //发送信息给client,注意使用了clent_addr结构体指针
} close(sockfd); return ;
}

学习UDP的更多相关文章

  1. lwip协议栈学习---udp

    书籍:<嵌入式网络那些事-lwip协议> udp协议的优点: 1)基于IP协议,无连接的用户数据报协议,适用于传送大批量数据, 2)实时性比较高,适用于嵌入式网络 发送函数:udp_sen ...

  2. Netty 框架学习 —— UDP 广播

    UDP 广播 面向连接的传输(如 TCP)管理两个网络端点之间的连接的建立,在连接的生命周期的有序和可靠的消息传输,以及最后,连接的有序终止.相比之下,类似 UDP 的无连接协议中则没有持久化连接的概 ...

  3. 最近在学习UDP方面的通信,找到一个很棒的博客

    http://blog.csdn.net/kesalin/article/details/8798039

  4. Linux编程之UDP SOCKET全攻略

    这篇文章将对linux下udp socket编程重要知识点进行总结,无论是开发人员应知应会的,还是说udp socket的一些偏僻知识点,本文都会讲到.尽可能做到,读了一篇文章之后,大家对udp so ...

  5. UDP和多线程服务器

    UDP: UDP是数据报文传输协议,这个传输协议比较野蛮,发送端不需要理会接收端是否存在,直接就发送数据,不会像TCP协议一样建立连接.如果接收端不存在的话,发送的数据就会丢失,UDP协议不会去理会数 ...

  6. 【swoole】如何在docker+swoole环境下测试udp服务

    前面几篇文章讲了使用 docker+swoole 环境来测试tcp服务以及如何测试,但是当我开始学习udp服务那块的时候,发现使用原来的方式在 docker+swoole 环境下行不通啦,后来发现如果 ...

  7. Python 网络通信协议 tcp udp区别

    网络通信的整个流程 在这一节就给大家讲解,有些同学对网络是既熟悉又陌生,熟悉是因为我们都知道,我们安装一个路由器,拉一个网线,或者用无限路由器,连上网线或者连上wifi就能够上网购物.看片片.吃鸡了, ...

  8. 【转】Linux编程之UDP SOCKET全攻略

    转自:http://www.cnblogs.com/skyfsm/p/6287787.html?utm_source=itdadao&utm_medium=referral 这篇文章将对lin ...

  9. 计算机网络课设之基于UDP协议的简易聊天机器人

    前言:2017年6月份计算机网络的课设任务,在同学的帮助和自学下基本搞懂了,基于UDP协议的基本聊天的实现方法.实现起来很简单,原理也很简单,主要是由于老师必须要求使用C语言来写,所以特别麻烦,而且C ...

随机推荐

  1. Java8学习笔记(五)--Stream API详解[转]

    为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 ...

  2. alibaba的FastJson(高性能JSON开发包) json转换

    http://www.oschina.net/code/snippet_228315_35122 class User{ private int id; private String name; pu ...

  3. CentOS7 yum方式安装MariaDB 10.2.13-1

    注:以下步骤都是以root身份运行. 一.建立mariadb.repo 1,编辑新文件,命令:vim  /etc/yum.repos.d/mariadb.repo 2,输入如下内容,保存退出 [mar ...

  4. [Laravel] 13 - WEB API : update & error tracking

    前言 一.大纲 Ref: https://www.imooc.com/video/3134 版本升级分析以及数据表设计 版本升级分析 掌握如何设计版本升级数据表 版本升级接口开发以及APP演示 二.数 ...

  5. NUC972----最简单的驱动(转)

    1.新建文本文档,重命名为 hello_dev.c (驱动的开发同应用的开发一样,也是在文本文档下开发的). 2.包含头文件 内核模块需要包含内核相关头文件,不同模块根据功能的差异,所需要的头文件也不 ...

  6. &与&amp;问题

    1.后台传到前端的url,如果有&会被前端解析成&的(直接js获取的时候),所以最好是将数值放到input中,然后再获取

  7. kubernetes-PetSet

    什么是Pet?Pet是一个有状态应用程序,本质上它是一个具有确定性名称以及唯一身份的Pod,身份内容包括: DNS中可以识别的固定hostname 顺序化索引(Pet名称组成:PetSetName-O ...

  8. E - Radar Installation

    Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...

  9. zabbix监控告警Received empty response from Zabbix Agent Assuming that agent dropped connection

    zabbix监控告警Received empty response from Zabbix Agent Assuming that agent dropped connection错误 查看zabbi ...

  10. 蚂蚁金服缘何自研Service Mesh?

    2018年,微服务方兴未艾,Service Mesh(服务网格)又快速崛起.有观点认为,2018年可被称之为“Service Mesh元年”,在未来两年中,Service Mesh将迎来爆发式增长,成 ...