Back to 8. Berceley sockets and Client- Server model
      Up to Table of Contents
      Ahead to 8.2 An example program

      8.1 Client-Server Model

      • 8.1.1 gethostbyname
      • 8.1.2 getservbyname
      • 8.1.3 socket and bind
      • 8.1.4 listen and accept

       CLIENT---------------------SERVER
      -------------------------------------------

      socket() -----------------------socket()

      (bind()) -----------------------bind()

      ----------------------------------listen()

      connect()--------------->

      <-------------- -----------------accept()

      send()------------------>
       

      <-------------- -----------------recv()
      send() ------------------>

      ---------------------------------recv()

      close()

      Communication addresses:

      struct sockaddr_in myaddr; /* for local socket address */
      struct sockaddr_in peeraddr; /* for peer socket address */

      8.1.1 gethostbyname

        struct hostent *gethostbyname(name)
        char *name;

        Example:

        struct hostent *hp; /*ptr to host info for remote*/
        --------------
        peeraddr.sin_family = AF_INET;
        hp = gethostbyname(argv[1])
        peeraddr_in.sin_addr.s_addr
        = ((struct in_addr *)(hp->h_addr))->s_addr;

      8.1.2 getservbyname

        struct servent *getservbyname(name,proto)
        char *name, *proto;

        Example:

        struct servent *sp /* pointer to service info */
        -----
        sp = getservbyname ( "example", "tpc" );
        peeraddr.sin_port = sp->s_port;

      8.1.3 socket and bind

        s = socket ( af, type, protocol );
        int af,type,protocol;

        bind(s,addr,addrlen)
        int s
        struct sockaddr *addr;
        int addrlen;

        Example:

        struct sockaddr_in sin;
        s = socket(AF_INET,SOCK_STREAM,0);
        sin.sin_family = AF_INET;
        sin.sin_addr.s_addr = INADDR_ANY;
        sin.sin_port = MYPORT;
        bind ( s, &sin, sizeof(sin) );

      8.1.4 listen and accept

        listen(s, maxrequests)
        int s, maxrequests;
        ..........
        s=accept(ls,addr,addrlen)
        int s;
        int ls;
        struct sockaddr *addr;
        int *addrlen;

        Example:

        listen (ls,5);
        ....................

        addrlen = sizeof(sockaddr_in);
        s = accept( ls, &peeraddr, &addrlen );

        SOCKET s IS NOW READY TO RECEIVE DATA FROM CLIENT

        recv (s, &buffer, len, 0);
        ............................
        send (s, &buff2, len2,0);

        CLIENT:

        connect ( s, addr, addrlen)
        int s;
        struct sockaddr *addr;
        int addrlen;

        count = send(s,msg,flags)
        int s;
        char *msg;
        int len,flags;

      Back to 8. Berceley sockets and Client- Server model
      Up to Table of Contents
      Ahead to 8.2 An example program