Learning Networking basics using C programs, to start with here is simple UDP server side code,
Why to start with UDP because its simple, no need of connection handshake like TCP.
udp server
#include <sys/types.h>;
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>/* close() */
#include <string.h> /* memset() */
#define LOCAL_SERVER_PORT 1500
#define MAX_MSG 1500
int main() {
int sd, rc, n, cliLen;
struct sockaddr_in cliAddr, servAddr;
char msg[MAX_MSG];
int count;
int prev_count=0;
/* socket creation */
sd=socket(AF_INET, SOCK_DGRAM, 0); //create unix socket
if(sd<0)>
printf("cannot open socket \n");
exit(-1);
}
/* bind local server port */
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr("1.168.3.100"); //using fixed IP for simplicity
servAddr.sin_port = htons(LOCAL_SERVER_PORT);
rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr));
if(rc<0)>
printf("cannot bind port number %d \n", LOCAL_SERVER_PORT);
exit(-1);
}
printf("waiting for data on port UDP %u\n",
LOCAL_SERVER_PORT);
/* server infinite loop */
while(1) {
/* receive message */
cliLen = sizeof(cliAddr);
n = recvfrom(sd, msg, MAX_MSG, 0,
(struct sockaddr *) &cliAddr, &cliLen);
if(n<0)>
printf("cannot receive data \n");
continue;
}
/* print received message */
printf("from %s:UDP%u: count:%d message: %s\n",
}/* end of server infinite loop */
return 0;
}
Why to start with UDP because its simple, no need of connection handshake like TCP.
udp server
#include <sys/types.h>;
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>/* close() */
#define LOCAL_SERVER_PORT 1500
#define MAX_MSG 1500
int main() {
int sd, rc, n, cliLen;
struct sockaddr_in cliAddr, servAddr;
char msg[MAX_MSG];
int count;
int prev_count=0;
/* socket creation */
sd=socket(AF_INET, SOCK_DGRAM, 0); //create unix socket
if(sd<0)>
printf("cannot open socket \n");
exit(-1);
}
/* bind local server port */
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr("1.168.3.100"); //using fixed IP for simplicity
servAddr.sin_port = htons(LOCAL_SERVER_PORT);
rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr));
if(rc<0)>
printf("cannot bind port number %d \n", LOCAL_SERVER_PORT);
exit(-1);
}
printf("waiting for data on port UDP %u\n",
LOCAL_SERVER_PORT);
/* server infinite loop */
while(1) {
/* receive message */
cliLen = sizeof(cliAddr);
n = recvfrom(sd, msg, MAX_MSG, 0,
(struct sockaddr *) &cliAddr, &cliLen);
if(n<0)>
printf("cannot receive data \n");
continue;
}
/* print received message */
printf("from %s:UDP%u: count:%d message: %s\n",
}/* end of server infinite loop */
return 0;
}
Comments
Good work, but aren't you missing a call to the function listen() before de while(1) loop??