<s id="mvh2b"><strike id="mvh2b"><u id="mvh2b"></u></strike></s>
    1. <rp id="mvh2b"></rp>

      当前位置:首页 > IT教程

      (一)UDP基本编程步骤

      时间:2021-08-05 13:54:16来源:金橙教程网 作者:admin8 阅读:78次 [手机版]
       

      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;
      }

      相关阅读

      程序设计模式————编程模式

      设计模式的分类 创建型模式&#xff0c;共五种&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式

      UDP数据包解析

      在如何封装一个数据包上&#xff0c;是一个非常细致的问题&#xff0c;而利用UDP协议来封装的话&#xff0c;是比较简单&#xff0c;让我们一步步

      C#高级编程(一)

      1.字符串和正则表达式1,CompareTo()方法&#xff0c;比较字符串的内容2,Replace()用另一个字符或者字符串替换字符串中给定的字符或者

      UDP协议

      1 UDP协议 1.1 UDP认识 UDP是一种简单的面向数据报、无

      高手教你如何从零开始学游戏编程

      开发游戏可能是学习编程的理由中最吸引人的一条了。但如何从零开始入门&#xff0c;达到能够开发游戏的编程水平&#xff0c;是困扰无数勇

      分享到:

      IT相关

      程序相关

      推荐文章

      热门文章

      东北老女人嫖老头视频_无遮挡H肉动漫视频在线观看_欧美牲交a欧美牲交aⅴ另类_狼人乱码无限2021芒果