欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

UDP编程

程序员文章站 2022-03-16 11:04:45
...

UDP编程
UDP编程
UDP编程

服务端代码:

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <time.h>
#include <string.h>
#define TIME_PORT 9090
#define DATA_SIZE 256

int main()
{
        int sock_fd;
        struct sockaddr_in local;
        struct sockaddr_in from;
        int n;
        socklen_t fromlen;
        char buff[DATA_SIZE];
        time_t cur_time;
        sock_fd = socket(AF_INET,SOCK_DGRAM,0);
        local.sin_family = AF_INET;
        local.sin_port = htons(TIME_PORT);		//监听端口
        local.sin_addr.s_addr = INADDR_ANY;		//本机
        memset(local.sin_zero,0,8);
        if(0 != bind(sock_fd,(struct sockaddr *)&local,sizeof(local))){
                perror("bind socket error!");
                close(sock_fd);
                return -1;
        }
        printf("Bind socket\n");
        fromlen = sizeof(from);
		 while(1){
                n = recvfrom(sock_fd,buff,sizeof(buff),0,(struct sockaddr *)&from,&fromlen);		//接收数据
                if(n > 0){
                        buff[n] = '\0';																										//设置字符串结束符
                        printf("Get Msg From %s : %s\n",inet_ntoa(from.sin_addr),buff);				//将32位IP地址转化为a.b.c.d
                }
                if(0 == strncmp(buff,"quit",4))																				//判断是否退出
                        break;
                if(0 == strncmp(buff,"time",4)){																			//判断是否请求时间
                       cur_time = time(NULL);																				//生成当前时间的字符串
                        strcpy(buff,asctime(gmtime(&cur_time)));													
                        sendto(sock_fd,buff,sizeof(buff),0,(struct sockaddr *)&from,fromlen);		//发送时间给客户端
                }
        }
        close (sock_fd);
        return 0;
}

客户端:

#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <time.h>
#include <string.h>
#define TIME_PORT 9090
#define DATA_SIZE 256
int main()
{
        int sock_fd;
        struct sockaddr_in serv;
        int n;
        socklen_t servlen;
        char buff[DATA_SIZE];
        sock_fd = socket(AF_INET,SOCK_DGRAM,0);
        serv.sin_family = AF_INET;
        serv.sin_port = htons(TIME_PORT);
        serv.sin_addr.s_addr = INADDR_ANY;
        servlen = sizeof(serv);
        strcpy(buff,"time");
        if(-1 == sendto(sock_fd,buff,sizeof(buff),0,(struct sockaddr *)&serv,servlen)){                      			//发送请求
                perror("send data");
                close(sock_fd);
                return 0;
        }
        printf("send time request\n");
        n = recvfrom(sock_fd,buff,sizeof(buff),0,(struct sockaddr *)&serv,&servlen);					//接受返回
        buff[n] = '\0';
        printf("time from server: %s\n",buff);
        /*退出连接*/
        strcpy(buff,"quit");
        if(-1 == sendto(sock_fd,buff,sizeof(buff),0,(struct sockaddr *)&serv,servlen)){
                perror("send data");
                close(sock_fd);
                return 0;
        }
        printf("send quit command\n");
        close(sock_fd);
        return 0;

}

相关标签: UDP