1. UDP通讯模型

2. 服务器端

① 创建一个socket,用函数socket()

② 绑定IP地址、端口等信息到socket上,用函数bind()

③ 循环接收数据,用函数recvfrom()

④ 关闭网络连接

3. 客户端

① 创建一个socket,用函数socket()

② 绑定IP地址、端口等信息到socket上,用函数bind()

③ 设置服务器端IP地址和端口等属性

④ 发送数据,用函数sendto()

⑤ 关闭网络连接

4. 简单示例

① 服务器端

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h> #define SERVER_PORT 8888
#define MAX_MSG_SIZE 1024 void udps_respon(int sockfd)
{
struct sockaddr_in addr;
int addrlen, n;
char msg[MAX_MSG_SIZE]; while()
{ /* 从网络上读,并写到网络上 */
bzero(msg, sizeof(msg)); // 初始化,清零 addrlen = sizeof(struct sockaddr); n = recvfrom(sockfd, msg, MAX_MSG_SIZE, , (struct sockaddr*)&addr, &addrlen); // 从客户端接收消息 msg[n] = ;//将收到的字符串尾端添加上字符串结束标志
/* 显示服务端已经收到了信息 */
fprintf(stdout, "Server have received %s", msg); // 显示消息
}
} int main(void)
{
int sockfd;
struct sockaddr_in addr; /* 服务器端开始建立socket描述符 */
sockfd = socket(AF_INET, SOCK_DGRAM, );
if(sockfd < )
{
fprintf(stderr, "Socket Error:%s\n", strerror(errno));
exit();
} /* 服务器端填充 sockaddr结构 */
bzero(&addr, sizeof(struct sockaddr_in)); addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(SERVER_PORT); /* 捆绑sockfd描述符 */
if(bind(sockfd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) < )
{
fprintf(stderr, "Bind Error:%s\n", strerror(errno));
exit();
} udps_respon(sockfd); // 进行读写操作 close(sockfd);
}

② 客户端

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h> #define SERVER_PORT 8888
#define MAX_BUF_SIZE 1024 void udpc_requ(int sockfd, const struct sockaddr_in *addr, int len)
{
char buffer[MAX_BUF_SIZE];
int n; while()
{ /* 从键盘读入,写到服务端 */
printf("Please input char:\n"); fgets(buffer, MAX_BUF_SIZE, stdin); sendto(sockfd, buffer, strlen(buffer), , (struct sockaddr *)addr, len); bzero(buffer, MAX_BUF_SIZE);
}
} int main(int argc,char **argv)
{
int sockfd;
struct sockaddr_in addr; if(argc != )
{
fprintf(stderr, "Usage:%s server_ip\n",argv[]);
exit();
} /* 建立 sockfd描述符 */
sockfd = socket(AF_INET, SOCK_DGRAM, );
if(sockfd < )
{
fprintf(stderr,"Socket Error:%s\n",strerror(errno));
exit();
} /* 填充服务端的资料 */
bzero(&addr, sizeof(struct sockaddr_in)); addr.sin_family = AF_INET;
addr.sin_port = htons(SERVER_PORT); if(inet_aton(argv[], &addr.sin_addr) < ) /*inet_aton函数用于把字符串型的IP地址转化成网络2进制数字*/
{
fprintf(stderr,"Ip error:%s\n",strerror(errno));
exit();
} udpc_requ(sockfd, &addr, sizeof(struct sockaddr_in)); // 进行读写操作 close(sockfd);
}

UDP通讯模型简单示例的更多相关文章

  1. TCP通讯模型简单示例

    1. TCP通讯模型 2. 服务器端 ① 创建socket,用函数socket() ② 绑定IP地址.端口号等信息到socket上,用函数bind() ③ 设置允许的最大连接数,用函数listen() ...

  2. SharePoint 2010 -- Silverlight托管客户端模型简单示例

    Silverlight托管客户端模型,是SharePoint2010推出的三种客户端模型".NET托管"."ECMAScript"."Sliverli ...

  3. SharePoint 2010 -- .Net托管客户端模型简单示例

    .Net托管客户端模型,是SharePoint2010推出的三种客户端模型".NET托管"."ECMAScript"."Sliverlight&quo ...

  4. SharePoint2010 -- ECMAScript客户端模型简单示例

    ECMAScript客户端模型,是SharePoint2010推出的三种客户端模型".NET托管"."ECMAScript"."Sliverlight ...

  5. C# UDP 连接通信 简单示例

    Udp.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  6. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序

    SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论   异常汇总:http://www ...

  7. Java UDP网络编程 - 最简单示例

    UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...

  8. Linux 下 简单客户端服务器通讯模型(TCP)

    原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...

  9. onps栈使用说明(3)——tcp、udp通讯测试

    4. tcp客户端 在协议栈源码工程下,存在一个用vs2015建立的TcpServerForStackTesting工程.其运行在windows平台下,模拟实际应用场景下的tcp服务器.当tcp客户端 ...

随机推荐

  1. jQuery-图片的放大镜显示效果(不需要大小图)

    问题:当页面高度很大时,放大图片的图层不会跟随着 1.demo.html ;display:none;}          #tip s   {position:absolute;top:40px;l ...

  2. Codeforces 1136F Cooperative Game (神仙题)

    这种题就是难者不会,会者不难. 博客讲的很详细了 代码: #include <bits/stdc++.h> using namespace std; string s; int read( ...

  3. koa的教程

    https://github.com/bmcmahen/koa-mongo-sessionhttp://www.fkwebs.com/2333.htmlhttps://segmentfault.com ...

  4. 使用批处理替换windows系统中的hosts文件

    chcp 936 >nul@echo offmode con lines=30 cols=60%1 mshta vbscript:CreateObject("Shell.Applica ...

  5. python3-while与if

    # Auther: Aaron Fan age_of_oldboy = 56 #定义一个while循环的起始判断值countcount = 0#当count小于3的情况下一直执行while循环whil ...

  6. javascript字符串 转 驼峰字符

    字符串  转  驼峰字符 <script type="text/javascript"> var str = 'peng-hui-datou'; function a( ...

  7. .replace(/-/g,"/")的用法

    /-/g正则表达式   g  代表  global    全部替换 var str1 ="2012-08-12 23:13"; str1 = str1.replace(/-/g,& ...

  8. 数据结构 lucky_ming幸运的小明

    问题描述 在快速排序过程中, 每次会找一个划分值, 将小于划分值的放到其左边, 大于划分值的放右边, 然后再依次递归左右两边, 对子序列进行同样的操作, 直到子序列为空则停止操作.最后就得到了有序的序 ...

  9. 【IMOOC学习笔记】多种多样的App主界面Tab实现方法(四)

    ViewPagerIndicator+ViewPager 要想使用ViewPagerIndicator,要使用到viewPagerlibrary开源库 top.xml <?xml version ...

  10. [raspberry pi3] 编译安装chromium

    想要试试arm板上使用selenium是不是可能,发现Firefox什么的不顶用,网上有提供的chrome的安装手顺,但是没有arm版本的对应的chromedriver,只能自己搞了. 这边介绍的方法 ...