shashanksingh
November 8th, 2011, 04:14 AM
I was trying out socket proramming in C, most of this code is from an online tutorial.
server.c
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int main()
{
int true=1;
int master_socket=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_addr, client_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(15000);
bzero(&(server_addr.sin_zero),8);
if (setsockopt(master_socket,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int)) == -1)
{
perror("Setsockopt");
exit(1);
}
if (bind(master_socket, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))== -1)
{
perror("Unable to bind");
exit(1);
}
if (listen(master_socket,3)<0)
{
perror("listen");
exit(0);
}
int connected;
while(1);
{
connected = accept(master_socket, (struct sockaddr *)&client_addr,sizeof(struct sockaddr_in));
printf("\n I got a connection from (%s , %d)",inet_ntoa(client_addr.sin_addr),ntohs(client_addr .sin_port));
printf(" Listening \n");
}
return 0;
}
and my client.c
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int main()
{
int client_socket=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_addr;
struct hostent *host;
host = gethostbyname("127.0.0.1");
/* type of socket created in socket() */
server_addr.sin_family = AF_INET;
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
/* 7000 is the port to use for connections */
server_addr.sin_port = htons(15000);
bzero(&(server_addr.sin_zero),8);
if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))== -1)
puts("error connecting..");
return 0;
}
The problem is when I run the client program, it doesnt throw any errors, just terminates.
But the server doesn't tell me it got a connection..
The actual code was quite lengthy, I thought this should be enough to make a simple connection
server.c
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int main()
{
int true=1;
int master_socket=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_addr, client_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(15000);
bzero(&(server_addr.sin_zero),8);
if (setsockopt(master_socket,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int)) == -1)
{
perror("Setsockopt");
exit(1);
}
if (bind(master_socket, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))== -1)
{
perror("Unable to bind");
exit(1);
}
if (listen(master_socket,3)<0)
{
perror("listen");
exit(0);
}
int connected;
while(1);
{
connected = accept(master_socket, (struct sockaddr *)&client_addr,sizeof(struct sockaddr_in));
printf("\n I got a connection from (%s , %d)",inet_ntoa(client_addr.sin_addr),ntohs(client_addr .sin_port));
printf(" Listening \n");
}
return 0;
}
and my client.c
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int main()
{
int client_socket=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_addr;
struct hostent *host;
host = gethostbyname("127.0.0.1");
/* type of socket created in socket() */
server_addr.sin_family = AF_INET;
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
/* 7000 is the port to use for connections */
server_addr.sin_port = htons(15000);
bzero(&(server_addr.sin_zero),8);
if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))== -1)
puts("error connecting..");
return 0;
}
The problem is when I run the client program, it doesnt throw any errors, just terminates.
But the server doesn't tell me it got a connection..
The actual code was quite lengthy, I thought this should be enough to make a simple connection