1. 程式人生 > 其它 >UDP客戶端服務端通訊

UDP客戶端服務端通訊

服務端 udp_server.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>

int main(){

    //建立用於通訊的socket
    int fd = socket(PF_INET,SOCK_DGRAM,0);
    if(fd == -1){
        perror("socket");
        exit(-1);
    }

    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(9999);
    addr.sin_addr.s_addr = INADDR_ANY;
    //繫結
    int ret = bind(fd,(struct sockaddr*)&addr,sizeof(addr));
    if(ret == -1){
        perror("bind");
        exit(-1);
    }

    //通訊
    while(1){
        //接受資料
        char recvbuf[1024] = {0};
        char cIp[128];
        struct sockaddr_in caddr;
        int len = sizeof(caddr);
        recvfrom(fd,recvbuf,sizeof(recvbuf),0,(struct sockaddr *)&caddr,&len);

        printf("cliet IP : %s, Port : %d\n",
            inet_ntop(AF_INET,&caddr.sin_addr.s_addr,cIp,sizeof(cIp)),
            ntohs(caddr.sin_port));
        
        printf("client say : %s\n",recvbuf);

        //傳送資料
        sendto(fd,recvbuf,sizeof(recvbuf),0,(struct sockaddr *)&caddr,sizeof(caddr));
    }
    close(fd);
    return 0;
}

客戶端 udp_client.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>

int main(){

    //建立用於通訊的socket
    int fd = socket(PF_INET,SOCK_DGRAM,0);
    if(fd == -1){
        perror("socket");
        exit(-1);
    }

    struct sockaddr_in saddr;
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(9999);
    inet_pton(AF_INET,"192.168.245.128",&saddr.sin_addr.s_addr);

    int i = 0;
    //通訊
    while(1){
        //傳送資料
        char sendBuf[128];
        sprintf(sendBuf,"hello i am client, i = %d\n",i++);
        sendto(fd,sendBuf,sizeof(sendBuf),0,(struct sockaddr *)&saddr,sizeof(saddr));

        //接受資料
        recvfrom(fd,sendBuf,sizeof(sendBuf),0,NULL,NULL);

        printf("server say : %s\n",sendBuf);
        sleep(1);
    }
    close(fd);
    return 0;
}

執行結果