UDP协议服务器、客户端使用实例Demo

服务器:

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

#define MAXSIZE     512
#define SERVER_PORT 12355
#define SEND_PORT   12377

int main()
{
    struct sockaddr_in server_addr, client_addr;
    socklen_t client_addr_len;
    char buff[MAXSIZE];
    char ip[INET_ADDRSTRLEN];
    int i, len;
    /*创建socket*/
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    /*设置广播属性*/
      int on = 1;
      setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
    /*绑定端口号*/
    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(SERVER_PORT);
    bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
    printf("Udp Server Start ...\n");
    while(1)
    {
         /*接收客户端信息*/
         client_addr_len = sizeof(client_addr);
         len = recvfrom(sockfd, buff, MAXSIZE, 0, (struct sockaddr*)&client_addr, &client_addr_len);
         if(len == -1)
         {
            printf("recvfrom error\n");
         }
         /*打印客户端ip,port*/
         inet_ntop(AF_INET, &client_addr.sin_addr, ip, sizeof(ip));
         int rcv_port = ntohs(client_addr.sin_port);
         printf("Received info from %s at PORT %d\n",ip,rcv_port);
         for(i = 0; i < len; i++)
         {
            buff[i] = toupper(buff[i]);
         }
         /*设置发送端口*/
         client_addr.sin_port = htons(SEND_PORT);
         /*发送信息到客户端*/
         len = sendto(sockfd, buff, len, 0, (struct sockaddr*)&client_addr, sizeof(client_addr));
         if(len == -1)
         {
            printf("sendto error!\n");
         }
    }
    close(sockfd);
    return 0;
}

客户端:

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

#define MAXSIZE     512
#define SERVER_PORT 12355
#define RECV_PORT   12377
#define IP "255.255.255.255"

int main(int argc, char* argv[])
{
     char buff[MAXSIZE];
     /*创建socket,设置广播属性*/
     int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
     int on = 1;
     setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
     /*绑定接收端口*/
     struct sockaddr_in rcv_addr;
     bzero(&rcv_addr, sizeof(rcv_addr));
     rcv_addr.sin_family = AF_INET;
     inet_pton(AF_INET, "127.0.0.1", &rcv_addr.sin_addr);
     rcv_addr.sin_port = htons(RECV_PORT);
     bind(sockfd,(struct sockaddr*)&rcv_addr,sizeof(rcv_addr));
     /*设置发送到服务器的IP,端口等信息*/
     struct sockaddr_in server_addr;
     bzero(&server_addr, sizeof(server_addr));
     server_addr.sin_family = AF_INET;
     inet_pton(AF_INET, IP, &server_addr.sin_addr);
     server_addr.sin_port = htons(SERVER_PORT);
     printf("Udp Client Start....\n");
     while(fgets(buff, MAXSIZE, stdin) != NULL)
     {
         /*发送信息到服务器*/
         int ret = sendto(sockfd, buff, strlen(buff), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));
         if(-1 == ret)
         {
             printf("sendto error!\n");
         }
         /*接收服务器返回信息*/
         ret = recvfrom(sockfd, buff, MAXSIZE, 0, NULL, 0);
         if(-1 == ret)
         {
             printf("recvfrom error!\n");
         }
         write(STDOUT_FILENO, buff, ret);
     }
     close(sockfd);
     return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值