linux 网络编程---->简单的UDP实例

这是一个简单的UDP的实例而已~

//!> server
//!> server.c





#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>

#define  
    SERV_PORT      6000
#define      MAXLINE            1024

int main( int argc, char ** argv )
{
      char      recv[MAXLINE];
      int            listenfd,connfd;
      int            chilen, len,i;
      int            nread;
      structsockaddr_in servaddr, chiaddr;
     
      //!> establish the socket
      //!>
      if( (listenfd = socket(  AF_INET, SOCK_DGRAM,0  ) ) == -1 )
      {
            printf("Socket error.. %d\n", errno);
            exit(EXIT_FAILURE );
      }
     
      //!>
      //!> write info
      bzero(&servaddr, sizeof( servaddr ) );
      servaddr.sin_family = AF_INET;
      servaddr.sin_addr.s_addr  =htonl( INADDR_ANY);
      servaddr.sin_port = htons( SERV_PORT );
     
      //!>
      //!> bind
      if( bind(listenfd, ( struct sockaddr * )&servaddr, sizeof(servaddr ) ) == -1 )
      {
            printf("Binderror... %d\n", errno);
            exit(EXIT_FAILURE );
      }
     
      while( 1)
         
            chilen =sizeof( chiaddr );
             
              memset( recv, 0, sizeof( recv ) );
              nread =recvfrom(connfd,recv, MAXLINE, 0, (struct sockaddr*)&chiaddr, &chilen);//read(connfd, recv, MAXLINE );
                                                                                                                              //!> 记住:一般都用它
            if( nread ==-1 )
            {
                  continue;
                  printf("Readerror ... %d\n", errno);
                  close(connfd );
                  exit(EXIT_FAILURE );
            }
            else if(nread == 0 )
            {
                  printf("Haveno data..\n");
                  continue;                                                      //!> return
            }
            else
            {
                  len =sizeof( recv );
                  recv[len] ='\0';
                  printf("Server get from client : %s\n", recv);
                 
                  i = 0;
                  while(recv[i] )                        //!> 此处是一个简单的处理,将小写字母改成大写回送
                  {
                        recv[i] =toupper( recv[i] );
                        i++;
                  }
                       
                  sendto(connfd, recv, strlen( recv ), 0, (struct sockaddr*)&chiaddr, chilen);
                              //!> send to client
            }
           
      }
     
      return0;
}


/ /!> client
//!>client.c





#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <netinet/in.h>

#define       SERV_PORT      6000
#define      MAXLINE            1024

int main( int argc, char ** argv )
{
      char      recv[MAXLINE];
      int            connfd;
      int            nread;
      int            len;
      structsockaddr_in servaddr;
     
      if( argc !=2 )
      {
            printf("Please input the server's IP only !");
            exit(EXIT_FAILURE );
      }
     
      //!>
      //!> socket
      if( ( connfd= socket(  AF_INET, SOCK_DGRAM,0  ) ) == -1 )
      {
            printf("Socket error.. %d\n", errno);
            exit(EXIT_FAILURE );
      }
     
      //!>
      //!> info
      bzero(&servaddr, sizeof(servaddr));
      servaddr.sin_family = AF_INET;
      servaddr.sin_port = htons(SERV_PORT);
          inet_pton(AF_INET, argv[1] ,&servaddr.sin_addr);
         
     
      while( 1)
      {
           
            //write(connfd, "hello\n", 7 );
           
            memset(recv, 0, sizeof( recv ) );
            sendto(connfd, "hello\n", 7, 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
            printf("Client send : hello\n");
           
            sleep( 2);
     
            len =sizeof( servaddr );
            nread =recvfrom(connfd, recv, MAXLINE, 0, (struct sockaddr*)&servaddr, &len);//read( connfd,recv, MAXLINE );
           
            if( nread ==-1 )
            {
                  printf("Readerror.. %d\n", errno);
                  exit(EXIT_FAILURE );
            }
            else if(nread == 0 )
            {
                  continue;
            }
            else
            {
                  len =strlen( recv );
                  recv[len] ='\0';
                  printf("Client get from server : %s\n", recv);
            }
           
      }

      close(connfd );
           
      return0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值