udp_server

来源:互联网 发布:卷积运算公式矩阵 编辑:程序博客网 时间:2024/06/07 03:26

服务器端

#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>static void usage(const char* proc){    printf("Usage: %s[local_ip] [local_port]\n", proc);}int main(int argc, char *argv[]){    if(argc != 3)    {        usage(argv[0]);        return 1;    }    int sock = socket(AF_INET, SOCK_DGRAM, 0);    if(sock < 0)    {        perror("socket");        return 2;    }    struct sockaddr_in local;    local.sin_family = AF_INET;    local.sin_addr.s_addr = inet_addr(argv[1]);    local.sin_port = htons(atoi(argv[2]));    if(bind(sock, (struct sockaddr*)&local, sizeof(local)) < 0)    {        perror("bind");        return 3;    }    printf("bind success...\n");    struct sockaddr_in client;    socklen_t len = sizeof(client);    char buf[1024];     while(1)    {        ssize_t s = recvfrom(sock, buf, sizeof(buf)-1, 0, (struct sockaddr *)&client, &len);        if(s > 0)        {            buf[s] = 0;            printf("client#:%s", buf);            sendto(sock, buf, sizeof(buf)-1, 0, (struct sockaddr *)&client, len);        }        else         {            close(sock);            printf("client quit...\n");            break;        }    }    return 0;}

客户端

#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>static void usage(const char* proc){    printf("Usage: %s[local_ip] [local_port]\n", proc);}int main(int argc, char *argv[]){    if(argc != 3)    {        usage(argv[0]);        return 1;    }    int sock = socket(AF_INET, SOCK_DGRAM, 0);    if(sock < 0)    {        perror("socket");        return 2;    }    struct sockaddr_in server;    server.sin_family = AF_INET;    server.sin_addr.s_addr = inet_addr(argv[1]);    server.sin_port = htons(atoi(argv[2]));    socklen_t len = sizeof(server);    char buf[1024];     while(1)    {        printf("server to ###");        fflush(stdout);        ssize_t s = read(0, buf, sizeof(buf)-1);        if(s > 0)        {            buf[s] = 0;            sendto(sock, buf, sizeof(buf)-1, 0, (struct sockaddr *)&server, len);        }        s = recvfrom(sock, buf, sizeof(buf)-1, 0, (struct sockaddr *)&server, &len);        if(s > 0)        {            printf("client echo$:%s",buf);                     }    }    return 0;}


原创粉丝点击