udp socket

mqq@208_181:~/fabricehao/test/20120726> cat udpserver.c 
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc,char * argv[]){
    int s,fd,len;
    struct sockaddr_in my_addr;
    struct sockaddr_in remote_addr;
    int sin_size;
    char buf[BUFSIZ];

    memset(&my_addr,0,sizeof(my_addr));
    my_addr.sin_family=AF_INET;
    my_addr.sin_addr.s_addr=INADDR_ANY;
    my_addr.sin_port=htons(87654);
    
    if((s=socket(AF_INET,SOCK_DGRAM,0))<0)
    {
        perror("socket");
        return 1;
    }
    if(bind(s,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0)
    {
        perror("bind");
        return 1;
    }
    sin_size=sizeof(struct sockaddr_in);
    printf("waiting for a packet ...\n");
    if((len=recvfrom(s,buf,BUFSIZ,0,(struct sockaddr *)&remote_addr,&sin_size))<0)
    {
        perror("recvfrom ");
        return 1;
    }
    printf("received packet from %s:\n",inet_ntoa(remote_addr.sin_addr));
    buf[len]='\0';
    printf("contents: %s \n",buf);
    close(s);
    return 0;
}

mqq@208_181:~/fabricehao/test/20120726> 


mqq@208_181:~/fabricehao/test/20120726> cat udpclient.c 
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc,char *argv[]){
    int s,len;
    struct sockaddr_in remote_addr;
    char buf[BUFSIZ];
    
    memset(&remote_addr,0,sizeof(remote_addr));
    remote_addr.sin_family=AF_INET;
    remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
    remote_addr.sin_port=htons(87654);
    if((s=socket(AF_INET,SOCK_DGRAM,0))<0)
    {
        perror("socket");
        return 1;
    }
    strcpy(buf,"this is a test message");
    printf("sending:%s\n",buf);
    if((len=sendto(s,buf,strlen(buf),0,(struct sockaddr *)&remote_addr,sizeof(struct sockaddr)))<0)
    {
        perror("sendto");
        return 1;
    }
    close(s);
    return 0;
}
mqq@208_181:~/fabricehao/test/20120726> 

你可能感兴趣的:(socket)