1. 程式人生 > >關於socket程式設計中的INADDR_ANY

關於socket程式設計中的INADDR_ANY










10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47

/* A simple server in the internet domain using TCP 
   The port number is passed as an argument */ 
#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
void error ( char * msg ) 

    

perror ( msg ) ; 
    exit ( 1 ) ; 

int main ( int argc , char * argv [ ] ) 

      int sockfd , newsockfd , portno , clilen ; 
      char buffer [ 256 ] ; 
      struct sockaddr_in serv_addr , cli_addr ; 
      int n ; 
      if ( argc < 2 ) { 
          fprintf ( stderr , "ERROR, no port provided \n " ) ; 
          
exit 
( 1 ) ; 
      } 
     sockfd = socket ( AF_INET , SOCK_STREAM , 0 ) ; 
      if ( sockfd < 0 ) 
        error ( "ERROR opening socket" ) ; 
     bzero ( ( char * ) & serv_addr , sizeof ( serv_addr ) ) ; 
     portno = atoi ( argv [ 1 ] ) ; 
     serv_addr. sin_family = AF_INET ; 
     serv_addr. sin_addr . s_addr = INADDR_ANY ; 
     serv_addr. sin_port = htons ( portno ) ; 
      if ( bind ( sockfd , ( struct sockaddr * ) & serv_addr , 
              sizeof ( serv_addr ) ) < 0 ) 
              error ( "ERROR on binding" ) ; 
     listen ( sockfd , 5 ) ; 
     clilen = sizeof ( cli_addr ) ; 
     newsockfd = accept ( sockfd , ( struct sockaddr * ) & cli_addr , & clilen ) ; 
      if ( newsockfd < 0 ) 
          error ( "ERROR on accept" ) ; 
     bzero ( buffer , 256 ) ; 
     n = read ( newsockfd , buffer , 255 ) ; 
      if ( n < 0 ) error ( "ERROR reading from socket" ) ; 
      
printf 
( "Here is the message: %s \n " , buffer ) ; 
     n = write ( newsockfd , "I got your message" , 18 ) ; 
      if ( n < 0 ) error ( "ERROR writing to socket" ) ; 
      return 0 ; 
}