参考博客: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. vs问题集

    ******将获取的所有的','换成'<br/>'********** data.Data.StandardSeating.replace(/,/g,"<br/>&q ...

  2. CentOS重新加载网卡报错 Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/23

    最新文章:Virson's Blog 重新加载网卡时出现的错误如下: [root@vdb1 dev]# service network restart Shutting down interface ...

  3. 如何解决安装VMware后郑广电宽带客户端不能登录的问题?

    如何解决安装VMware后郑广电宽带客户端不能登录的问题? 问题:安装VMware后,郑广电宽带客户端不能登录,提示:“不允许代理上网”. 解决:将VMware的虚拟网卡(VMnet1和VMnet8) ...

  4. 80x86的保护模式

    什么是保护模式? 通过对程序使用的存储区采用分段.分页的存储管理机制, 达到分组使用.互不干扰的保护目的.能为每个任务提供一台虚拟处理器,使每个任务单独执行,快速切换. 所以,内存地址由段基地址.偏移 ...

  5. Xcode 8.0 新特性 & Swift 3.0 增加的变动

    从 Xcode 8.0 开始,目前所有的插件都无法工作! NSLog 无法输出 -- 此bug等待正式版本... Xcode 提供了文档注释快捷键option + cmd + / 但是要把系统升级到1 ...

  6. Mysql 查看连接数,状态 最大并发数 && 怎么设置才合理

    show status like '%max_connections%'; ##mysql最大连接数 set global max_connections=1000 ##重新设置 show varia ...

  7. 描述: http通讯基础类

    package com.founder.ec.web.util.payments.payeco.http; import com.founder.ec.web.util.payments.payeco ...

  8. 关于git CRLF LF结尾的问题

    在使用git的过程中,如果我们的项目是跨平台开发的 那么CRLF的处理也许会成为一个很头疼的事情,有可能会出以下的莫名其妙的问题: 我们的某个开发人员在linux上提交的一个文件 当从windows上 ...

  9. OpenGL——旋转的六边形(动画)

    代码: #include<iostream> #include <math.h> #include<Windows.h> #include <GL/glut. ...

  10. Redis JdkSerializationRedisSerializer,stringRedisSerializer,ProtoBuf 体积,性能简单比较.

    /** * User: laizhenwei * Date: 2018-04-10 Time: 14:17 * Description: */ @RunWith(SpringRunner.class) ...