udp写服务器程序

来源:互联网 发布:冰冰办公软件 编辑:程序博客网 时间:2024/04/28 06:35

server端:

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

#define MYPORT 1234
#define MAXBUFLEN 100

int main()
{
    int sockfd;
    struct sockaddr_in my_addr;
    struct sockaddr_in their_addr;
    int addr_len,numbytes;
    char buf[MAXBUFLEN];


    if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1){
        perror("socket");
        exit(1);
    }

    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(MYPORT);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(my_addr.sin_zero),sizeof(struct sockaddr_in));
 
    if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1){
       perror("bind");
       exit(1);
    }
    addr_len = sizeof(struct sockaddr);

    if((numbytes=recvfrom(sockfd,buf,MAXBUFLEN,0,(struct sockaddr*)&their_addr,&addr_len))==-1){
       perror("recvfrom");
       exit(1);
    }
    //printf("got packet from %s\n",inet_ntoa(their_addr.sin_addr));
    printf("packet is %d bytes long\n",numbytes);
    buf[numbytes] = '\0';
    printf("received: %s\n",buf);
    close(sockfd);
    return 0;
}

client端:

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

#define MYPORT  1234

int main(int argc,char* argv[])
{
     int sockfd;
     struct sockaddr_in their_addr;
     struct hostent *he;
     int numbytes;
    
     if(argc!=3){
       fprintf(stderr,"usage:client hostname\n");
       exit(1);
     }

     if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1){
        perror("socket");
        exit(1);
     }

     their_addr.sin_family = AF_INET;
     their_addr.sin_port = htons(MYPORT);
     their_addr.sin_addr.s_addr = inet_addr(argv[1]);
     bzero(&(their_addr.sin_zero),sizeof(struct sockaddr_in));

     if((numbytes=sendto(sockfd,argv[2],strlen(argv[2]),0,(struct sockaddr*)&their_addr,sizeof(struct sockaddr)))==-1){
           perror("sendto");
           exit(1);
     }
      
     printf("sent %d bytes\n",numbytes);    

     close(sockfd);
     return 0;
}

 

运行:

./udpserver

./udpclient 127.0.0.1 hhhh