zoukankan      html  css  js  c++  java
  • Linux UDP通信例子

    UDP C/S编程的步骤如下图所示

    ////server.c
    #include <sys/types.h>
    #include <sys/socket.h>
    #include<pthread.h>
    #include <netinet/in.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    int main(int argc, char **argv)
    {
        if (argc != 2)
        {
            printf("Usage: %s port
    ", argv[0]);
            exit(1);
        }
        printf("Welcome! This is a UDP server, I can only received message from client and reply with same message
    ");
        
        struct sockaddr_in addr;
        addr.sin_family = AF_INET;
        addr.sin_port = htons(atoi(argv[1]));
        addr.sin_addr.s_addr = htonl(INADDR_ANY);
    
        int sock;
        if ( (sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
        {
            perror("socket");
            exit(1);
        }
        if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
        {
            perror("bind");
            exit(1);
        }
        char buff[512];
        struct sockaddr_in clientAddr;
        int n;
        int len = sizeof(clientAddr);
        while (1)
        {
            n = recvfrom(sock, buff, 511, 0, (struct sockaddr*)&clientAddr, &len);
            if (n>0)
            {
                buff[n] = 0;
                printf("%s %u says: %s
    ", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port), buff);
                n = sendto(sock, buff, n, 0, (struct sockaddr *)&clientAddr, sizeof(clientAddr));
                if (n < 0)
                {
                    perror("sendto");
                    break;
                }
            }
            else
            {
                perror("recv");
                break;
            }
        }
        return 0;
    }
    ///client.c
    #include <sys/types.h>
    #include <sys/socket.h>
    #include<pthread.h>
    #include <netinet/in.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    
    int main(int argc, char **argv)
    {
        if (argc != 3)
        {
            printf("Usage: %s ip port", argv[0]);
            exit(1);
        }
        printf("This is a UDP client
    ");
        struct sockaddr_in addr;
        int sock;
    
        if ( (sock=socket(AF_INET, SOCK_DGRAM, 0)) <0)
        {
            perror("socket");
            exit(1);
        }
        addr.sin_family = AF_INET;
        addr.sin_port = htons(atoi(argv[2]));
        addr.sin_addr.s_addr = inet_addr(argv[1]);
        if (addr.sin_addr.s_addr == INADDR_NONE)
        {
            printf("Incorrect ip address!");
            close(sock);
            exit(1);
        }
    
        char buff[512];
        int len = sizeof(addr);
        while (1)
        {
            gets(buff);
            int n;
            n = sendto(sock, buff, strlen(buff), 0, (struct sockaddr *)&addr, sizeof(addr));
            if (n < 0)
            {
                perror("sendto");
                close(sock);
                break;
            }
            n = recvfrom(sock, buff, 512, 0, (struct sockaddr *)&addr, &len);
            if (n>0)
            {
                buff[n] = 0;
                printf("received:");
                puts(buff);
            }
            else if (n==0)
            {
                printf("server closed
    ");
                close(sock);
                break;
            }
            else if (n == -1)
            {
                perror("recvfrom");
                close(sock);
                break;
            }
        }
        
        return 0;
    }
  • 相关阅读:
    近期文章与教程和其他情况说明
    Python从入门到精通--课程目录
    第四天:创建型模式--原型模式
    python api链接数据库
    Delphi 实现简易语音发音(基于TTS方式)
    delphi下运行vbscript脚本
    使用PaxScript为Delphi应用增加对脚本的支持
    delphi与javascript互通
    奇技淫巧之Delphi和JavaScript互通
    在delphi中执行javascript代码
  • 原文地址:https://www.cnblogs.com/CoderTian/p/4200629.html
Copyright © 2011-2022 走看看