Linux 客戶端、服務端UDP通信

cli.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define PORT  3000

int main()
{
    //創建套接字
    int sockfd;
    sockfd = socket(PF_INET,SOCK_DGRAM,0);
    if(sockfd == -1)
    {
        printf("創建套接字失敗!\n");
        return -1;
    }
    else
        printf("創建套接字成功,套接字描述符爲%d.\n",sockfd);
    
    //綁定ip和端口
    struct sockaddr_in ser_addr;
    bzero(&ser_addr,sizeof(struct sockaddr_in));
    ser_addr.sin_family = AF_INET;
    ser_addr.sin_port = htons(PORT);
    ser_addr.sin_addr.s_addr = inet_addr("127.0.0.1");        

    //向服務端發送信息
    char buf[128];
    int size;
    socklen_t len;

    while(1)
    {
        printf("輸入信息:");
        fgets(buf,128,stdin);
        size = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&ser_addr,sizeof(struct sockaddr));
        if(size == -1)
        {
            printf("向服務端發送信息失敗!\n");
            break;
        }
        else
        {
            buf[size] = '\0';
            printf("客戶端:%s",buf);
            if(strncmp(buf,"Q",1) == 0)
            {
                printf("退出交互!\n");
                break;
            }
        }
    }
    close(sockfd);
    return 0;
}























ser.c

#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>

#define PORT  3000

int main()
{
    //創建套接字
    int sockfd;
    sockfd = socket(PF_INET,SOCK_DGRAM,0);
    if(sockfd == -1)
    {
        printf("創建套接字失敗!\n");
        return -1;
    }
    else
        printf("創建套接字成功,套接字描述符爲%d.\n",sockfd);
    
    //綁定ip和端口
    struct sockaddr_in ser_addr;
    bzero(&ser_addr,sizeof(struct sockaddr_in));
    ser_addr.sin_family = AF_INET;
    ser_addr.sin_port = htons(PORT);
    ser_addr.sin_addr.s_addr = htonl(INADDR_ANY);        

    if(bind(sockfd,(struct sockaddr *)&ser_addr,sizeof(struct sockaddr)) == -1)
    {
        printf("綁定ip和端口失敗!\n");
        close(sockfd);
        return -1;
    }
    else
        printf("綁定端口成功!\n");
    
    //等待客戶端的交互
    char buf[128];
    int size;
    struct sockaddr_in cli_addr;
    socklen_t len;

    while(1)
    {
        size = recvfrom(sockfd,buf,128,0,(struct sockaddr*)&cli_addr,&len);
        if(size == -1)
        {
            printf("接受客戶端信息失敗!\n");
            break;
        }
        else if(strcmp(buf,"\0") == 0)
            continue;
        else
        {
            buf[size] = '\0';
            printf("來自客戶端的信息:%s",buf);
            //printf("%s",buf);
            if(strncmp(buf,"Q",1) == 0)
            {
                printf("退出交互!\n");
                break;
            }
        }
    }
    close(sockfd);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章