Chapter 06. UDP Server/Client
Understanding the basic structure and principle of UDP server/client Goal Understanding the basic structure and principle of UDP server/client Learning socket system calls for UDP application Understanding broadcasting concept and UDP based implementation
Similarity of TCP and UDP Addressing based on port number Checking data error
Differences between TCP and UDP item TCP UDP ① connection-oriented protocol - Data comm. after connection setup Connectionless protocol - Data comm. without connection ② - byte-stream service - Datagram service ③ Reliable data transfer - By data retransmission Unreliable data transfer - No data retransmission ④ unicast Unicast, Broadcast, Multicast
UDP server/client operation (1/2)
UDP server/client operation (2/2) UDP server/client operation (cont’d) UDP server UDP server . . . Comm. Comm. UDP client #1 UDP client #2 UDP client #1 . . . UDP client #n
UDP server/client example Code example UDP client UDP server fgets() sendto() printf() recvfrom()
UDP server/client analysis (1/4) UDP/IP Socket requires three components ① protocol Defined by Socket() system call ② local IP address and port number Server or client side ③ remote IP address and port number
UDP server/client analysis (2/4) Socket data structure server Local IP addr Local port num Remote IP addr Remote port num client application OS network • • • Recvfrom buffer Sendto buffer
UDP server/client analysis (3/4) UDP server/client structure ① socket() bind() recvfrom() sendto() closesocket() UDP server UDP client network
UDP server/client analysis (4/4) UDP server/client structure ② (Ignore!!) socket() bind() recvfrom() sendto() closesocket() send() recv() UDP server UDP client network connect()
data transfer system call (1/4) sendto() send application data to peer side int sendto ( SOCKET s, const char* buf, int len, int flags, const struct sockaddr* to, int tolen ) ; success: num. of bytes sent, fail: SOCKET_ERROR
data transfer system call (2/4) sendto() example // initialize socket address structure to receiver address SOCKADDR_IN serveraddr; ... // declare buffer for sending data char buf[BUFSIZE]; // store sending data to buffer // data sending. retval = sendto(sock, buf, strlen(buf), 0, (SOCKADDR *)&serveraddr, sizeof(serveraddr)); if(retval == SOCKET_ERROR) error handling; printf("%d bytes sent...\n", retval);
data transfer system call (3/4) recvfrom() Data receving from peer side int recvfrom ( SOCKET s, char* buf, int len, int flags, struct sockaddr* from, int* fromlen ) ; success: num. of bytes sent, fail: SOCKET_ERROR
data transfer system call (4/4) recvfrom() example // initialize socket address structure to sender address SOCKADDR_IN peeraddr; int addrlen; // declare buffer for received data char buf[BUFSIZE]; // data receiving addrlen = sizeof(peeraddr); retval = recvfrom(sock, buf, BUFSIZE, 0, (SOCKADDR *)&peeraddr, &addrlen); if(retval == SOCKET_ERROR) error handling; printf("%d bytes received...\n", retval);
Communication types broadcasting (1/6) unicasting broadcasting multicasting
Broadcasting principle sender
Procedure to send broadcast data broadcasting (3/6) Procedure to send broadcast data ① Enable broadcast option for a socket BOOL bEnable = TRUE; retval = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&bEnable, sizeof(bEnable)); if(retval == SOCKET_ERROR) err_quit("setsockopt()");
Procedure to send broadcast data (cont’d) broadcasting (4/6) Procedure to send broadcast data (cont’d) ② Sending data to broadcast address // initialize socket address structure SOCKADDR_IN remoteaddr; ZeroMemory(&remoteaddr, sizeof(remoteaddr)); remoteaddr.sin_family = AF_INET; remoteaddr.sin_port = htons(9000); remoteaddr.sin_addr.s_addr = htonl(INADDR_BROADCAST); // store data to buffer char buf[BUFSIZE]; ... // sending data. retval = sendto(sock, buf, strlen(buf), 0, (SOCKADDR *)&remoteaddr, sizeof(remoteaddr)); if(retval == SOCKET_ERROR) error handling; printf("%d bytes sent….\n", retval);
Broadcast address broadcasting (5/6) host ID 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 network ID 11 . . . . . . . . . . . . 1 Network-directed broadcast local broadcast 11 . . . 1 subnet-directed broadcast subnet ID
Network-directed broadcast broadcasting (6/6) Broadcast address (cont’d) BroadcastSender.cpp, BroadcastReceiver.cpp router Network-directed broadcast router Local broadcast