Welcome Guestlogin to KGsePGregister at KGsePG email | FAQs

Sockets Final

download

    1 of 24

    Sockets Final



    Sockets Final - Transcript


    CS 640 Computer Networking
    Ashutosh Shukla Lecture 3 Network Programming

    Topics
    Client server model Sockets interface Socket primitives Example code for echoclient and echoserver Debugging With GDB Programming Assignment 1 MNS

    Client asks request server provides response Typically single server multiple clients The server does not need to know anything about the client even that it exists The client should always know something about the server at least where it is located
    1 Client sends request Client process 4 Client handles response 3 Server sends response Server process 2 Server handles request Resource

    Client sever model

    Note clients and servers are processes running on hosts can be the same or different hosts

    Sockets as means for inter process communication IPC

    application layer

    application layer

    Client Process Socket
    transportnetwork OS layer TCP UDP network layer IP link layer e g ethernet physical layer

    Internet

    Server Process Socket
    transport layer TCP UDP link layer e g ethernet physical layer

    stack

    Internet Internet

    OS network network layer IP stack

    The interface that the OS provides to its networking subsystem

    Internet Connections TCP IP
    Address the machine on the network Address the process
    By IP address By the port number

    The pair of IP address port makes up a socket address
    Client socket address 128 2 194 242 3479 Server socket address 208 216 181 15 80

    Client

    Connection socket pair 128 2 194 242 3479 208 216 181 15 80

    Server port 80 Server host address 208 216 181 15

    Client host address 128 2 194 242 Note 3479 is an ephemeral port allocated by the kernel

    Note 80 is a well known port associated with Web servers

    Examples of client programs

    Clients

    How does a client find the server

    Web browsers ftp telnet ssh The IP address in the server socket address identifies the host The well known port in the server socket address identifies the service and thus implicitly identifies the server process that performs that service Examples of well known ports
    Port 7 Echo server Port 23 Telnet server Port 25 Mail server Port 80 Web server

    Using Ports to Identify Services
    Server host 128 2 194 242 Client host Service request for 128 2 194 242 80 i e the Web server Web server port 80 Kernel Echo server port 7

    Client

    Client

    Service request for 128 2 194 242 7 i e the echo server

    Web server port 80 Kernel Echo server port 7

    Servers are long running processes daemons

    Servers

    Each server waits for requests to arrive on a well known port associated with a particular service
    Port 7 echo server Port 23 telnet server See etc services for a Port 25 mail server comprehensive list of the Port 80 HTTP server services available on a Linux machine Other applications should choose between 1024 and 65535

    Created at boot time typically by the init process process 1 Run continuously until the machine is turned off

    Sockets
    What is a socket
    To the kernel a socket is an endpoint of communication To an application a socket is a file descriptor that lets the application read write from to the network
    Remember All Unix I O devices including networks are modeled as files

    Clients and servers communicate with each by reading from and writing to socket descriptors The main distinction between regular file I O and socket I O is how the application opens the socket descriptors

    Network Byte Ordering


    Socket Programming Cliches

    Network is big endian host may be big or little endian Functions work on 16 bit short and 32 bit long values htons htonl convert host byte order to network byte order ntohs ntohl convert network byte order to host byte order Use these to convert network addresses ports

    struct sockaddr in serveraddr fill in serveraddr with an address Connect takes struct sockaddr as its second argument connect clientfd struct sockaddr serveraddr sizeof serveraddr

    SOCKET int socket int domain int type int protocol
    domain AF INET IPv4 protocol type SOCK DGRAM or SOCK STREAM protocol 0 IPPROTO UDP or IPPROTO TCP returned socket descriptor sockfd 1 is an error

    Socket primitives

    BIND int bind int sockfd struct sockaddr my addr int addrlen
    sockfd socket descriptor returned from socket my addr socket address struct sockaddr in is used addrlen sizeof struct sockaddr


    struct sockaddr in unsigned short sin family unsigned short sin port struct in addr sin addr unsigned char sin zero 8

    address family always AF INET port num in network byte order IP addr in network byte order pad to sizeof struct sockaddr

    LISTEN int listen int sockfd int backlog ACCEPT int accept int sockfd void addr int addrlen CONNECT int connect int sockfd struct sockaddr serv addr int addrlen used by TCP client SEND int send int sockfd const void msg int len int flags
    msg message you want to send len length of the message flags 0 returned the number of bytes actually sent parameters are same as for bind addr here the socket address of the caller will be written returned a new socket descriptor for the temporal socket backlog how many connections we want to queue

    RECEIVE int recv int sockfd void buf int len unsigned int flags
    buf buffer to receive the message len length of the buffer don t give me more flags 0 returned the number of bytes received

    SEND DGRAM style int sendto int sockfd const void msg int len int flags const struct sockaddr to int tolen
    msg message you want to send len length of the message flags 0 to socket address of the remote process tolen sizeof struct sockaddr returned the number of bytes actually sent

    RECEIVE DGRAM style int recvfrom int sockfd void buf int len unsigned int flags struct sockaddr from int fromlen
    buf buffer to receive the message len length of the buffer don t give me more from socket address of the process that sent the data fromlen sizeof struct sockaddr flags 0 returned the number of bytes received

    CLOSE close socketfd

    Client server connectionless
    CREATE BIND

    SEND RECEIVE SEND CLOSE

    Client server connection oriented
    BIND SOCKET CONNECT TCP three way handshake ACCEPT LISTEN

    SEND

    RECEIVE

    SEND RECEIVE CLOSE

    Concurrent server

    EchoClient c include s
    include stdio h for printf and fprintf include sys socket h for socket connect sendto and recvfrom include arpa inet h for sockaddr in and inet addr include stdlib h for atoi and exit include string h for memset include unistd h for close define ECHOMAX 255 Longest string to echo

    EchoClient c variable declarations
    int main int argc char argv int sock Socket descriptor struct sockaddr in echoServAddr Echo server address struct sockaddr in fromAddr Source address of echo unsigned short echoServPort 7 Echo server port unsigned int fromSize address size for recvfrom char servIP 172 24 23 4 IP address of server char echoString I hope this works String to send to echo server char echoBuffer ECHOMAX 1 Buffer for receiving echoed string int echoStringLen Length of string to echo int respStringLen Length of received response

    EchoClient c creating the socket and sending
    Create a datagram UDP socket sock socket AF INET SOCK DGRAM 0 Construct the server address structure memset echoServAddr 0 sizeof echoServAddr Zero out structure echoServAddr sin family AF INET Internet addr family echoServAddr sin addr s addr htonl servIP Server IP address echoServAddr sin port htons echoServPort Server port Send the string to the server sendto sock echoString echoStringLen 0 struct sockaddr echoServAddr sizeof echoServAddr Recv a response

    EchoClient c receiving and printing
    fromSize sizeof fromAddr recvfrom sock echoBuffer ECHOMAX 0 struct sockaddr fromAddr fromSize Error checks like packet is received from the same server null terminate the received data echoBuffer echoStringLen 0 printf Received s n echoBuffer Print the echoed arg close sock exit 0 end of main

    EchoServer c
    int main int argc char argv int sock Socket struct sockaddr in echoServAddr Local address struct sockaddr in echoClntAddr Client address unsigned int cliAddrLen Length of incoming message char echoBuffer ECHOMAX Buffer for echo string unsigned short echoServPort 7 Server port int recvMsgSize Size of received message Create socket for sending receiving datagrams sock socket AF INET SOCK DGRAM 0 Construct local address structure memset echoServAddr 0 sizeof echoServAddr Zero out structure echoServAddr sin family AF INET Internet address family echoServAddr sin addr s addr htonl 172 24 23 4 echoServAddr sin port htons echoServPort Local port Bind to the local address bind sock struct sockaddr echoServAddr sizeof echoServAddr

    for Run forever cliAddrLen sizeof echoClntAddr Block until receive message from a client recvMsgSize recvfrom sock echoBuffer ECHOMAX 0 struct sockaddr echoClntAddr cliAddrLen printf Handling client s n inet ntoa echoClntAddr sin addr Send received datagram back to the client sendto sock echoBuffer recvMsgSize 0 struct sockaddr echoClntAddr sizeof echoClntAddr end of main Error handling is must

    man is your friend
    man accept man sendto Etc

    Socket Programming Help

    The manual page will tell you

    What include directives you need at the top of your source code The type of each argument The possible return values The possible errors in errno

    Prepare program for debugging Two main ways to run gdb
    On program directly
    run args

    Debugging with gdb

    Compile with g keep full symbol table Don t use compiler optimization O O2

    gdb progname Once gdb is executing we can execute the program with

    On a core post mortem

    Extensive in program documentation exists

    gdb progname core Useful for examining program state at the point of crash

    help or help topic or help command

    More information
    Socket programming
    W Richard Stevens UNIX Network Programming Infinite number of online resources http www cs rpi edu courses sysprog sockets sock html

    GDB

    Official GDB homepage http www gnu org software gdb gdb html GDB primer http www cs pitt edu mosse gdb note html