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客户端 ...
随机推荐
- 使用线程池优化Echo模型
在上一篇文章中 http://www.cnblogs.com/gosaint/p/8492356.html 我阐述了使用线程为每一个客户端创建一个工作线程来负责任务的执行.但是会存在如 ...
- 使用php输出时间格式
<? date_default_timezone_set("ETC/GMT-8"); $tm=time(); echo date("Y-m-d h:i a" ...
- 分布式锁2 Java非常用技术方案探讨之ZooKeeper 【转载】
前言: 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.以自己结合实际工作中的一些经验和网上看到的一些资料 ...
- JavaScipt——Windows.document对象
四中选择器:class ,id , name , 标签 通过选择器获取对象: document.getElementById(''); -- id选择器 ...................... ...
- ruby 数组与散列
def say_goodnight(name) result ="Good night ." +name return result end def say_goodmorning ...
- cmake利用toolchain.cmake生成makefile之后,make生成静态库失败问题
问题描述 利用toolchian.cmake设置好编译器后,利用make指令生成静态库,出现以下问题 Error running link command: No such file or direc ...
- C和C++中文件读写的区别
C中采用的主要是文件指针的办法,C++中对文件的操作主要运用了“文件流”(即非标准的输入输出)的思想 eg1": #include<stdio.h> //... FILE* fp ...
- C++面试笔记--循环链表,队列,栈,堆
之前已经学会了单链表的建立删除插入转置以及一些普通操作,双链表和单链表差不多,就是多了一个前驱指针,在许多操作中很方便,但是加了一个指针开销应该会大一些,总体上影响不大,这里开始讨论循环链表以及其他的 ...
- DNS线路
文章介绍 填写DNS地址时候,比较好记的就114.114.114.114,8.8.8.8,9.9.9.9,几个,但是常用的有哪些呢?这篇文章就简单介绍下了. 前言 两年多前,曾发帖对国内主流公共 DN ...
- PyTorch入门教程
https://www.zhihu.com/question/55720139 Deep Learning with PyTorch: A 60 Minute Blitz Author: Soumit ...