您现在的位置是:首页 > 技术文章网站首页技术文章

UDP 循环服务器

  • WangYe
  • 2020-07-20 14:28:15
  • 867 次阅读
UDP循环服务器客户/端服务端.

服务端:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#define BUFFLEN 1024
#define SERVER_PORT 8888

int main(int argc,char *argv[])
{
    int s;    /*服务器套接字文件描述符*/
    struct sockaddr_in local,to;    /*本地地址*/
    time_t now;    /*时间*/
    char buff[BUFFLEN];    /*接发数据缓存区*/
    int n = 0;
    socklen_t len = sizeof(to);
    
    s = socket(AF_INET,SOCK_DGRAM,0);    /*建立UDP套接字*/
    
    /*初始化地址*/
    memset(&local , 0 , sizeof(local));    /*清零*/
    local.sin_family = AF_INET;    /*AF_INET协议族*/
    local.sin_addr.s_addr = htonl(INADDR_ANY);    /*任意本地地址*/
    local.sin_port = htons(SERVER_PORT);    /*服务器端口*/
    
    /*将套接字文件描述符绑定到本地地址和端口*/
    bind(s , (struct sockaddr*)&local, sizeof(local));
    
    /*主处理过程*/
    while(1)
    {
        memset(buff,0,BUFFLEN);    /*清零*/
        n = recvfrom(s,buff,BUFFLEN,0,(struct sockaddr*)&to,&len); 
        /*接收发送方数据*/
        if(n > 0 && !strncmp(buff,"TIME",4))    /*判断是否合法接收数据*/
        {
            memset(buff , 0 , BUFFLEN);    /*清零*/
            now = time(NULL);    /*当前时间*/
            sprintf(buff , "%24s\\r\\n" , ctime(&now));    /*将时间复制入缓冲区*/
            /*发送数据*/
            sendto(s,buff,strlen(buff),0,(struct sockaddr*)&to,len);
        }
    }
    close(s);    /*关闭*/
    return 0;
}

客户端:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#define BUFFLEN 1024
#define SERVER_PORT 8888

int main()
{
    int s;    /*服务器套接字文件描述符*/
    struct sockaddr_in server;    /*本地地址*/
    char buff[BUFFLEN];    /*收发数据缓冲区*/
    int n = 0;    /*接收字符串长度*/
    socklen_t len = 0;    /*地址长度*/
    
    s = socket(AF_INET , SOCK_DGRAM , 0);    /*建立UDP套接字*/
    
    /*初始化地址初始化*/
    memset(&server , 0 , sizeof(server));    /*清零*/
    server.sin_family = AF_INET;    /*AF_INET协议族*/
    server.sin_addr.s_addr = htonl(INADDR_ANY);    /*任意本地地址*/
    server.sin_port = htons(SERVER_PORT);    /*服务器端口*/
    
    memset(buff,0,BUFFLEN);    /*清零*/
    strcpy(buff,"TIME");    /*复制发送字符串*/
    
    /*发送数据*/
    sendto(s,buff,strlen(buff),0,(struct sockaddr*)&server,sizeof(server));
    memset(buff,0,BUFFLEN);    /*清零*/
    
    /*接收数据*/
    len = sizeof(server);
    n = recvfrom(s,buff,BUFFLEN,0,(struct sockaddr*)&server,&len);
    
    /*打印消息*/
    if(n > 0){
        printf("TIME:%s",buff);
    }
    close(s);    /*关闭*/
    
    return 0;
}


上一篇:OSI/ISO网络分层介绍

下一篇:STL遍历算法

文章评论 (0)



Top