Tuesday, December 18, 2007

C Socket Programming - Client-Server

i have been a blogger for posting a lot of things almost 3 years now and i havent posted anything that is related to what my profession is right now (huwaw! so i just considered myself a professional eh!). i mean, i haven't posted a lot of techie stuffs here yet. that being said, im going to start making it come to life now (i mean, posting some technical stuffs). who knows? i might be able to help other people by posting things? goddamn! i talk too much! eheheh...

well, i have been into a lot of networking and programming in C and C++ for almost 8 months now. hmmm, sorry, make that 7 months. and i can say that i am very much enjoying it. last week, i have studied a little about socket programming (eehheh, i take pride, coz before, i didnt even know what socket programming was! thank god for the opportunity!) i, with some of my friends-slash-housemates-slash-c0-workers, did a simple client-server communication. the main aim was that the client will be sending a message to the server. geez! it took a lot of mind boggling for me. but nevertheless, I was able to finish it (well, hard core programmers may perceive this code really messy. some would even say, it sucks! eheheh. but i am still proud to what I have came up with. this drives me more to aim and do more...), of course with the help of my friends-slash-slash-slash.

and without further ado (hmm, i would've said, with a lot of things said! dang!ehhehe), this was what i have came up with:


------------------------------------------------------------------------------------

//THIS PROGRAM IS FOR THE SERVER

//server.c sample server

#include < stdio.h >
#include < sys/socket.h >
#include < netinet/in.h >
#include < arpa/inet.h >
#include < sys/types.h >
#define MYPORT 9993
#define BACKLOG 5
#define MAXDSIZE 50

int main(void)
{
int sockfd, newsockfd; //listens of sock_fd, new connection on new_fd
struct sockaddr_in my_addr; //server's address info
struct sockaddr_in client_addr; // connector's address info
char * ip;
char buf[MAXDSIZE];
int * memsock;

int n;

if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket error");
exit(1);
}

//initialization of values
my_addr.sin_family = AF_INET; // host byte order
my_addr.sin_port = htons(MYPORT); //short network byte order
my_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //my own IP address
memset(my_addr.sin_zero, '\0', sizeof my_addr.sin_zero);

//bind error checking

if ((bind(sockfd, (struct sockaddr *)&my_addr, sizeof (my_addr))) == -1)
{
perror("bind error");
exit(1);
}


/*this is the part where i was not able to focus on. this should reuse the port address the server used to listen to. therefore, i was not able to utilize this code

if(setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1)
{
perror("setsockopt");
exit(1);
} */

//listen error checking
if (listen(sockfd, BACKLOG) == -1)
{
perror("listen error");
exit(1);
}

//accept

n = sizeof(client_addr);

newsockfd = accept(sockfd, (struct sockaddr *)&client_addr, &n);


memset(buf, '\0', MAXDSIZE);

//receive
if(recv(newsockfd, buf, MAXDSIZE, 0) == -1)
{
perror("receive error");
exit(1);
}


printf("%s", buf);
close (sockfd);

return 0;
}







------------------------------------------------------------------------------

//THIS IS FOR THE CLIENT

//sclient.c sample server

#include < stdio.h >
#include < stdlib.h >
#include < sys/socket.h >
#include < netinet/in.h >
#include < sys/types.h >

#define MAXDSIZE 50

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

int sockfd;
int myport;
struct sockaddr_in server_addr;
char *msg;



if(argc != 3)
printf("Input is incomplete");



if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket error");
exit(1);
}

//initialization of values
myport = atoi(argv[2]);
server_addr.sin_family = AF_INET; // host byte order
server_addr.sin_port = htons(myport); //short network byte order

inet_aton(argv[1], &server_addr.sin_addr);


memset(server_addr.sin_zero, '\0', sizeof server_addr.sin_zero);



//connect
if((connect(sockfd, (struct sockaddr_in *)&server_addr, sizeof(server_addr))) == -1)
{
perror("connect error");
exit(1);
}

//message, send message
printf("Enter your message: ");

memset(msg, '\0', MAXDSIZE-1);
fgets(msg, MAXDSIZE, stdin);
write(sockfd, msg, MAXDSIZE);


//close
close (sockfd);


return 0;
}




well, i know what i did was way too basic. and i am a beginner. eheheh... : )

more to come....

Wednesday, December 12, 2007

OSPF Neighbor States

I was kinda reviewing about OSPF and I thought writing what I have learned is a good idea for me to remember them.

Down State - This is the state of a neighbor in OSPF when the RouterDeadInterval expired and the router did not receive any hello packet from a certain router. When the router pings the neighbor in down state, it will not be successful

Init - This is the state of a neighbor when a router receives a hello packet within the last RouterDeadInterval but the hello packet doesnt contain the router id of the router. The router should be able to ping the neighbor that is in this state

2-way - This state will be achieved when a router receives a hello packet that contains its router id. This means that the bidirectional communication is already established.

(well, i think it's a bad idea. im lost for words. ehehehehe. anyway, these are the other neighbor states. don't worry i will finish them one these days...)

ExStart

Exchange

Loading

Full

Attempt