UDP通讯模型简单示例
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通讯模型简单示例的更多相关文章
- TCP通讯模型简单示例
1. TCP通讯模型 2. 服务器端 ① 创建socket,用函数socket() ② 绑定IP地址.端口号等信息到socket上,用函数bind() ③ 设置允许的最大连接数,用函数listen() ...
- SharePoint 2010 -- Silverlight托管客户端模型简单示例
Silverlight托管客户端模型,是SharePoint2010推出的三种客户端模型".NET托管"."ECMAScript"."Sliverli ...
- SharePoint 2010 -- .Net托管客户端模型简单示例
.Net托管客户端模型,是SharePoint2010推出的三种客户端模型".NET托管"."ECMAScript"."Sliverlight&quo ...
- SharePoint2010 -- ECMAScript客户端模型简单示例
ECMAScript客户端模型,是SharePoint2010推出的三种客户端模型".NET托管"."ECMAScript"."Sliverlight ...
- C# UDP 连接通信 简单示例
Udp.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- 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 ...
- Java UDP网络编程 - 最简单示例
UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...
- Linux 下 简单客户端服务器通讯模型(TCP)
原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...
- onps栈使用说明(3)——tcp、udp通讯测试
4. tcp客户端 在协议栈源码工程下,存在一个用vs2015建立的TcpServerForStackTesting工程.其运行在windows平台下,模拟实际应用场景下的tcp服务器.当tcp客户端 ...
随机推荐
- this、new、call和apply的相关问题
讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本篇打算换一个思路从应用的角度来讲解this指针,从这个角度理解 ...
- 关于handler和异步任务
handler使用流程概要 首先在主线程新建一个handler实例,重写onhandlemessage(Message msg) 方法,对传过来的message进行处理 然后在子线程中完成操作,操作完 ...
- [luogu3379]最近公共祖先(树上倍增求LCA)
题意:求最近公共祖先. 解题关键:三种方法,1.st表 2.倍增法 3.tarjan 此次使用倍增模板(最好采用第一种,第二种纯粹是习惯) #include<cstdio> #includ ...
- floyd路径记录
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #in ...
- POJ 1220 高精度/进制转换
n进制转m进制,虽然知道短除法但是还是不太理解,看了代码理解一些了: 记住这个就好了: for(int k=0;l; ){ for(int i=l ; i>=1 ; i--){ num[i - ...
- 使用Post进行Http通信
--------------siwuxie095 有道翻译官网:http://fanyi.youdao.com/ 找到官网页面下方的 有 ...
- vue mock数据设置
1.新建mock文件夹 2.添加你需要的数据例如新建商品表goods.json { "status":"0", "result":[ { & ...
- python3-打印一个进度条
# Auther: Aaron Fan import sys,time for i in range(30): #打印一个#号,这种方法打印不会自动换行 sys.stdout.write('#') # ...
- 红帽rhel7.1usbguard
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-usi ...
- 树莓派研究笔记(6)-- Lakka模拟游戏机
我发现lakka的支持的游戏平台特别多,包括国产的OrangePI,真是太棒了.我们可以用这个来打造一个全功能模拟器平台.(删除线部分为Orange PI 测试成功内容,但在树莓派上无需那些操作) 访 ...