当前位置: 首页 > web >正文

(一)UDP基本编程步骤

UDP服务端编程分5步:

1.创建 UDP socket套接字,用socket函数。

2.设置socket的属性,用setsockopt()函数,(可选)

3.往socket绑定包含 IP信息,地址信息的 struct sockaddr_in(IPv4)结构体。用bind()函数

4.循环接收消息,用recvfrom()函数

5.关闭socket套接字


UDP客户端编程分:

1.创建 UDP socket套接字,用socket函数。

2.用sendto()函数往指定的IP,地址发送信息。


UDP的发送函数sendto()和接收函数 recvfrom():

1.sendto():

int ret = recvfrom(int sockfd,void *buf,size_t len,0, struct sockaddr *to , int fromlen);  

第一个参数为服务端的udp监听套接字

第二个参数为发送数据的缓冲区

第三个参数为缓存区的大小

第四个参数一般为0;

第五个参数一般为:记录地址信息,ip信息的结构体 。

第六个参数为:第五个参数的大小。

返回值:成功返回实际发送出去的信息的字节数,失败返回-1



2.recvfrom():

int ret = recvfrom(int sockfd,void *buf,size_t len,0, struct sockaddr *from,socket_t *fromlen);  

第一个参数为服务端的udp监听套接字

第二个参数为接收数据的缓冲区

第三个参数为缓存区的大小

第四个参数一般为0;

第五个参数一般为:记录地址信息,ip信息的结构体 。

第六个参数为:第五个参数的大小,取地址。

返回值:成功返回接收到的信息的字节数,失败返回-1


头文件:

#ifndef _MYHEAD_H_
#define _MYHEAD_H_#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>
#include <dirent.h>
#include <sys/mman.h>
#include <sys/wait.h>
#include <signal.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/msg.h>
#include <sys/sem.h>
#include <pthread.h>
#include <semaphore.h>
#include <poll.h>
#include <sys/epoll.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/in.h>#endif



服务端:

#include"myhead.h"
char rbuf[50];int main()
{int sockfd;int size;int ret;int on =1;struct sockaddr_in saddr;struct sockaddr_in raddr;//设置地址信息,ip信息size = sizeof(struct sockaddr_in);bzero(&saddr,size);saddr.sin_family = AF_INET;saddr.sin_port = htons(8888);saddr.sin_addr.s_addr = htonl(INADDR_ANY);//创建udp 的套接字sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd<0){perror("socket failed");return -1;}//设置端口复用setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)); //绑定地址信息,ip信息ret = bind(sockfd,(struct sockaddr*)&saddr,sizeof(struct sockaddr));if(ret<0){perror("sbind failed");return -1;}int val = sizeof(struct sockaddr);//循环接收客户端发来的消息while(1){puts("waiting data");ret=recvfrom(sockfd,rbuf,50,0,(struct sockaddr*)&raddr,&val);if(ret <0){perror("recvfrom failed");}printf("the data :%s\n",rbuf);bzero(rbuf,50);}//关闭udp套接字,这里不可达的。close(sockfd);return 0;
}

客户端:

#include"myhead.h"
char wbuf[50];int main()
{int sockfd;int size,on = 1;struct sockaddr_in saddr;int ret;size = sizeof(struct sockaddr_in);bzero(&saddr,size);//设置地址信息,ip信息saddr.sin_family = AF_INET;saddr.sin_port = htons(8888);saddr.sin_addr.s_addr = inet_addr("192.168.152.128");//192.168.152.128为服务端所在的ip,由于本代码是本机测试,所以写的是自己的ip//创建udp 的套接字sockfd= socket(AF_INET,SOCK_DGRAM,0);if(sockfd<0){perror("failed socket");return -1;}//设置端口复用setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));//循环发送信息给服务端while(1){puts("please enter data:");scanf("%s",wbuf);ret=sendto(sockfd,wbuf,50,0,(struct sockaddr*)&saddr,sizeof(struct sockaddr));if(ret<0){perror("sendto failed");}bzero(wbuf,50);}close(sockfd);return 0;
}


http://www.xdnf.cn/news/11316.html

相关文章:

  • dz带模板跟全套插件 搭建一款属于自己的论坛
  • 开源免费的一个企业级商城系统
  • 林锐《高质量程序设计指南C/C++》笔记04:异常处理
  • C# Label显示多行文本及换行(WinForm/WebForm)
  • 计算机论文投稿指南
  • MP3的频率、比特率、码率与音质的关系
  • PowerBuilder 12使.NET的应用开发更快捷
  • 适合新手编程的软件,什么编程软件比较好比较容易入门
  • ln 命令用法 hard link 与 symbolic link 区别 分析
  • 搜狗云输入法、Google手机语音搜索:两款创新云产品
  • IOCP的一些总结
  • linux串口驱动
  • 2020年12月统考练习题
  • 电脑蓝屏代码大全及解决办法合集
  • Linux系统移植
  • GB2312汉字拼音对照表
  • 星三角正反接线实物图_两个老电工的星三角之争,大家都来评评理!
  • html滚动条样式
  • 按键精灵
  • MSNLite v3.0正式版
  • 《Xenogears》(异度装甲)隐含的原型与密码
  • 最全性能测试 —— 性能测试概念、性能测试主流工具!,2024年最新IDEA太强悍了
  • 除了 P 站,程序员摸鱼还喜欢上哪些网站?
  • Jmeter 性能 —— 50TPS与秒杀达到多少人!_jmeter压测吞吐量最高50左右
  • 最新闲鱼小众蓝海虚拟资源,单号日入300+,三天必起店,矩阵放大月入1-2W
  • Android手机SD卡分区
  • 事件对象以及常见属性
  • 制作一个简单HTML旅游网站(HTML+CSS+JS)无锡旅游网页设计与实现8个页面
  • XMLHttpRequest 异步方式和同步方式
  • 如何在默认打开方式中去掉已失效或者已删除的应用选项