client server multi-threaded script

Score
0
Vote Up
February 6, 2012 at 05:38:59 Pacific
Specs: Windows XP

I have to do a tcp/ip client server programming for 3 threads in C . but i am not able to understand how will i write it for 3 ports number.Plzz help....

/*******************Server program*************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<unistd.h>
#include<pthread.h>

void error(const char *msg) //system call fails
{
perror(msg);
exit(1);
}

void *My_Msg_Func(void *ptr)
{
char *msg;
int i = 0;
msg = (char *)ptr;
while(i < 10)
{
sleep(10);
printf("%s\n",msg);
++i;
}
return NULL;
}

int main(int argc , char *argv[])
{
int socketfd;
int newsocketfd;
int portno;
int cliLen; //size of address of client
char array[10] = "Welcome"; //read server characters from socket connection
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int value;
pthread_t thread_array[3];
int i;
int thread_num = 3;
int ret;
char *msg = "THREAD";

if(argc < 2)
{
fprintf(stderr,"ERROR,no port provided");
exit(1);
}
/*Create Socket*/
socketfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(socketfd < 0)
{
error("ERROR in opening socket");
exit(1);
}
bzero((char*)&server_addr , sizeof(server_addr));
portno = atoi(argv[1]);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(portno);
// memcpy(&server_addr.sin_addr.s_addr ,host->h_addr ,host->h_length);
server_addr.sin_addr.s_addr = 0;
/*Binding Socket*/
if( bind( socketfd ,(struct sockaddr*)&server_addr ,sizeof(server_addr)) < 0)
{
error("ERROR in binding : Unable to bind");
exit(1);
}
if((listen(socketfd ,5)) < 0)
{
error("ERROR in listening");
exit(1);
}
printf("\n TCP server is waiting for client\n");
fflush(stdout);
while(1)
{
cliLen = sizeof(client_addr);
/*Accept a connection by server*/
newsocketfd = accept( socketfd ,(struct sockaddr*)&client_addr ,&cliLen);
if(newsocketfd < 0)
{
error("ERROR on accepting");
}
printf("Connection is established\n");
//printf("Connection established from %s %d \n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
for(i = 0; i < thread_num; i++)
{
if((ret = pthread_create(&thread_array[i],NULL,My_Msg_Func,(void *)msg )) < 0)
{
printf("Thread creation is failed at %d",ret);
exit(1);
}
printf("Thread is created\n");
value = send(newsocketfd ,array ,sizeof(array),0);
if(value < 0)
{
error("ERROR sending to socket");
}
printf("Message sended successfully\n");
printf("message is %s\n",array);
value = recv(newsocketfd ,array ,sizeof(array) ,0);
if(value < 0)
{
error("ERROR in receiving to socket");
}
printf("Message received successfully\n");
printf("message is %s\n",array);
}
for(i = 0; i < thread_num; i++)
{
pthread_join(thread_array[i], NULL);
}
}
/*Closing connections*/
close(newsocketfd);
close(socketfd);
return 0;
}

/***************Client program***************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>

void error(char *msg)
{
perror(msg);
exit(0);
}

int main(int argc ,char *argv[])
{
int socketfd;
int portno;
struct sockaddr_in server_addr;
struct hostent *server;
char array[10];
int value;
if(argc < 3)
{
fprintf(stderr," %s hostname port ",argv[0]);
exit(0);
}
portno = atoi(argv[2]);
/* Opening Socket */
socketfd = socket(AF_INET ,SOCK_STREAM ,IPPROTO_TCP);
if(socketfd < 0)
{
error("ERROR in opening socket");
}
server = gethostbyname(argv[1]); // arg[1] contains host name
if(server == NULL)
{
fprintf(stderr," ERROR, no host available");
exit(0);
}

bzero((char *)&server_addr ,sizeof(server_addr)); // set buffer value zero
server_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr ,(char *)&server_addr.sin_addr.s_addr ,server->h_length); // copy length bytes of character string
server_addr.sin_port = htons(portno);
/* connect function called by client to establish connection to server */
if(connect(socketfd ,(struct sockaddr *)&server_addr ,sizeof(server_addr)) < 0)
{
error("ERROR in connection");
}
bzero(array,10);
fgets(array,9,stdin);
value = send(socketfd ,array ,sizeof(array) ,0);
if(value < 0)
{
error("ERROR in sending to socket");
}
value = recv(socketfd ,array ,sizeof(array),0);
if(value < 0)
{
error("ERROR receiving from socket");
}
printf("%s\n",array);
close(socketfd);
return 0;
}

here program is working for 1 port no. but i do not know how to do it for 3 different port numbers...can some one plzz modify the server program for the port numbers suppose 5000,6000,7000....? plzz solve it ....


Reply ↓  Report •

Reply to Message Icon Start New Discussion
Related Posts

« Copy .txt files [Solved] What does the ^ do in thi... »