Пример #1
0
void *ThreadMain(void *threadArgs)
{
    /* Guarantees that thread resources are deallocated upon return */
//fprintf(stderr, "threadmain\n");
    pthread_detach(pthread_self()); 
    HandleTCPClient( threadArgs );
    free(threadArgs);              /* Deallocate memory for argument */
    return (NULL);
}
void *ThreadMain(void *clntSock) {
  // Guarantees that thread resources are deallocated upon return  
  pthread_detach(pthread_self()); 

  // Extract socket file descriptor from argument  
  HandleTCPClient((TCPSocket *) clntSock);

  delete (TCPSocket *) clntSock;
  return NULL;
}
int main(int argc, char *argv[])
{
    int servSock;                    /* Socket descriptor for server */
    int clntSock;                    /* Socket descriptor for client */
    struct sockaddr_in echoServAddr; /* Local address */
    struct sockaddr_in echoClntAddr; /* Client address */
    unsigned short echoServPort;     /* Server port */
    unsigned char  modbusAddr;       /* 8-bit modbus addr */
    unsigned int clntLen;            /* Length of client address data structure */

    if (argc != 3)     /* Test for correct number of arguments */
    {
        fprintf(stderr, "Usage:  %s <Server Port> <Modbus Addr>\n", argv[0]);
        exit(1);
    }

    echoServPort = atoi(argv[1]);  /* First arg:  local port */
    modbusAddr   = (unsigned char) atoi(argv[2]);  /* Second arg: modbus addr */

    /* Create socket for incoming connections */
    if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
        DieWithError("socket() failed");
      
    /* Construct local address structure */
    memset(&echoServAddr, 0, sizeof(echoServAddr));   /* Zero out structure */
    echoServAddr.sin_family = AF_INET;                /* Internet address family */
    echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */
    echoServAddr.sin_port = htons(echoServPort);      /* Local port */

    /* Bind to the local address */
    if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0)
        DieWithError("bind() failed");

    /* Mark the socket so it will listen for incoming connections */
    if (listen(servSock, MAXPENDING) < 0)
        DieWithError("listen() failed");

    for (;;) /* Run forever */
    {
        /* Set the size of the in-out parameter */
        clntLen = sizeof(echoClntAddr);

        /* Wait for a client to connect */
        if ((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr, 
                               &clntLen)) < 0)
            DieWithError("accept() failed");

        /* clntSock is connected to a client! */

        printf("Handling client %s\n", inet_ntoa(echoClntAddr.sin_addr));

        HandleTCPClient(clntSock, modbusAddr);
    }
    /* NOT REACHED */
}
Пример #4
0
void getSamples(short *samples) {

  in_port_t servPort = atoi("7000"); // First arg:  local port

  // Create socket for incoming connections
  int servSock; // Socket descriptor for server
  if ((servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
	exit(1);

  // Construct local address structure
  struct sockaddr_in servAddr;                  // Local address
  memset(&servAddr, 0, sizeof(servAddr));       // Zero out structure
  servAddr.sin_family = AF_INET;                // IPv4 address family
  servAddr.sin_addr.s_addr = htonl(INADDR_ANY); // Any incoming interface
  servAddr.sin_port = htons(servPort);          // Local port

  // Bind to the local address
  if (bind(servSock, (struct sockaddr*) &servAddr, sizeof(servAddr)) < 0){
	printf("\nBind failed\n");
	exit(1);
  }

  // Mark the socket so it will listen for incoming connections
  if (listen(servSock, 5) < 0){
	printf("\nListening on port failed\n");
	exit(1);
  }

  for (;;) { 
	// Run forever
    	struct sockaddr_in clntAddr; // Client address
	// Set length of client address structure (in-out parameter)
	socklen_t clntAddrLen = sizeof(clntAddr);

	// Wait for a client to connect
	int clntSock = accept(servSock, (struct sockaddr *) &clntAddr, &clntAddrLen);
	if (clntSock < 0){
		printf("\nClient Socket is %d\n",clntSock);
		exit(1);
	}

	// clntSock is connected to a client!

	char clntName[INET_ADDRSTRLEN]; // String to contain client address
	if (inet_ntop(AF_INET, &clntAddr.sin_addr.s_addr, clntName,sizeof(clntName)) != NULL)
		printf("Handling client %s/%d\n", clntName, ntohs(clntAddr.sin_port));
	else
		puts("Unable to get client address");

	HandleTCPClient(clntSock, samples);
	printf("\n Exiting getSamples"); 
	return;
    }
}
Пример #5
0
int main(int argc, const char *argv[]) {

    int serverSock; /* Socket descriptor for server */
    int clientOneSock; /* Socket descriptor for client 1 */

    unsigned int clientLength;
    struct sockaddr_in serverAddr; /* Local address */

    struct sockaddr_in clientAddr1;
    user users[] = {
            {"Alice", "1234",   0, ""},
            {"Bob",   "123456", 0, ""}
    };

    memset(&serverAddr, 0, sizeof(serverAddr)); /* Zero out structure */
    serverAddr.sin_family = AF_INET; /* Internet address family */
    serverAddr.sin_addr.s_addr = inet_addr(ADDRESS); /* Any incoming interface */
    serverAddr.sin_port = htons(PORT); /* Local port */

    if ((serverSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
        DieWithError("Socket failed!");
    }

    if (bind(serverSock, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0) {
        DieWithError("bind () failed");
    }

    printf("Server Started!\n");
    printf("Listening on %s:%d\n", ADDRESS, PORT);
    if (listen(serverSock, 2) < 0) {
        DieWithError("listen() failed");
    }


    while (1) {
        clientLength = sizeof(&clientAddr1);
        if ((clientOneSock = accept(serverSock, (struct sockaddr *) &clientAddr1, &clientLength)) < 0) {
            DieWithError("accept() failed");
        }
        printf("Client Connected: %s\n", inet_ntoa(clientAddr1.sin_addr));

        while (1) {

            if (HandleTCPClient(clientOneSock, users) == 0) {
                printf("BROKE LOL\n");
                close(clientOneSock);
                break;
            }

        }
    }
    return 0;
}
int main(int argc, char *argv[])
{
    int servSock;                    /* Socket descriptor for server */
    int clntSock;                    /* Socket descriptor for client */
    unsigned short echoServPort;     /* Server port */
    pid_t processID;                 /* Process ID from fork() */
    unsigned int childProcCount = 0; /* Number of child processes */
    
    char *html_path = argv[2]; //assign html_path argument

    if (argc != 3)     /* Test for correct number of arguments */
    {
        fprintf(stderr, "Usage:  %s <Server Port>\n", argv[0]);
        exit(1);
    }

    echoServPort = atoi(argv[1]);  /* First arg:  local port */

    servSock = CreateTCPServerSocket(echoServPort);

    for (;;) /* Run forever */
    {
        clntSock = AcceptTCPConnection(servSock);
        /* Fork child process and report any errors */
        if ((processID = fork()) < 0)
            DieWithError("fork() failed");
        else if (processID == 0)  /* If this is the child process */
        {
            close(servSock);   /* Child closes parent socket */
            HandleTCPClient(clntSock, html_path); //send html_path as argument

            exit(0);           /* Child process terminates */
        }

        printf("with child process: %d\n", (int) processID);
        close(clntSock);       /* Parent closes child socket descriptor */
        childProcCount++;      /* Increment number of outstanding child processes */

        while (childProcCount) /* Clean up all zombies */
        {
            processID = waitpid((pid_t) -1, NULL, WNOHANG);  /* Non-blocking wait */
            if (processID < 0)  /* waitpid() error? */
                DieWithError("waitpid() failed");
            else if (processID == 0)  /* No zombie to wait on */
                break;
            else
                childProcCount--;  /* Cleaned up after a child */
        }
    }
    /* NOT REACHED */
}
Пример #7
0
int main(int argc, char *argv[])
{
    if(argc != 2)   // Test for corrent number of arguments
        DieWithUserMessage("Parameter(s)", "<Server Port>");

    in_port_t servPort = atoi(argv[1]);     // First arg: local port

    // Create socket for incoming connections
    int servSock = socket(AF_INET6, SOCK_STREAM, IPPORT_TCP);
    if(sockSock < 0)
        DieWithSystemMessage("socket() failed");

    // Construct local address structure
    struct sockaddr_int servAddr;   // Local address
    memset(&servAddr, 0, sizeof(servAddr));     // Zero out structure
    servAddr.sin6_family = AF_INET6;    // Zero out structure
    servAddr.sin6_addr = in6addr_any;   // IPv6 address family
    servAddr.sin6_port = htons(servPort); // Local port

    // Bind to the local address
    if(bind(servSock, (struct sockaddr *)&servAddr, sizeof(servAddr)) < 0)
        DieWithSystemMessage("bind() failed");

    // Mark the socket so ti will listen for incoming connections
    if(listen(servSock, MAXPENDING) < 0)
        DieWithSystemMessage("listen() failed");

    for(;;)     // Run forever
    {
        struct sockaddr_in6 clntAddr;   // Client address
        // Set length of client address structure (in-out parameter)
        socklen_t clntAddrLen = sizeof(clntAddr);

        // Wait for a client to connect
        int clntSock = accept(servSock, (struct sockaddr *)&clntAddr, &clntAddrLen);
        if(clntSock < 0)
            DieWithSystemMessage("accept() failed");

        // clntSock is connected to a client!

        char clntName[INET6_ADDRSTRLEN];    // Array to contain client address string
        if(inet_ntop(AF_INET6, &clntAddr.sin6_addr.s6_addr, clntName,
                sizeof(clntName)) != NULL)
            printf("Handing client %s/%d\n", clntName, ntohs(clntAddr.sin6_port));
        else
            puts("Unable to get client address");

        HandleTCPClient(clntSock);
    }
    // NOT REACHED
}
Пример #8
0
void *ThreadMain(void *threadArgs)
{
    int clntSock;                   /* Socket descriptor for client connection */

    /* Guarantees that thread resources are deallocated upon return */
    pthread_detach(pthread_self()); 

    /* Extract socket file descriptor from argument */
    clntSock = ((struct ThreadArgs *) threadArgs) -> clntSock;
    free(threadArgs);              /* Deallocate memory for argument */

    HandleTCPClient(clntSock);

    return (NULL);
}
Пример #9
0
void *threadFunc() {
	int clntLen;     //Length of client address data structure

	for (;;) {     //Run forever
		clntLen = sizeof(ClntAddr);     //Set the size of the in-out parameter

		clntSock = accept(servSock, (struct sockaddr *) &ClntAddr,     //Wait for a client to connect
				&clntLen);

		printf("Handling client %s\n", inet_ntoa(ClntAddr.sin_addr));     //clntSock is connected to a client!

		HandleTCPClient(clntSock);
	}
	return NULL;
}
Пример #10
0
/** Look for a client 
 * 	This will handle commands but doesn't do anything ATM.
 * Think this will need to go in a thread
 */
void runClient(void)
{
	// Network stuff from http://cs.baylor.edu/~donahoo/practical/CSockets/code/TCPEchoServer.c
    int serverSock;                    /* Socket descriptor for server */
    int clientSock;                    /* Socket descriptor for client */	
    struct sockaddr_in echoServAddr; /* Local address */
    struct sockaddr_in echoClntAddr; /* Client address */	
    unsigned short echoServPort;     /* Server port */
    unsigned int clntLen;            /* Length of client address data structure */

	echoServPort = 5570;  /* This is the local port */

	// System initialisations
	/* Construct local address structure */
    memset(&echoServAddr, 0, sizeof(echoServAddr));   /* Zero out structure */
    echoServAddr.sin_family = AF_INET;                /* Internet address family */
    echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */
    echoServAddr.sin_port = htons(echoServPort);      /* Local port */

    /* Create socket for incoming connections */
    if ((serverSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
        DieWithError("socket() failed\n");	
	

    /* Bind to the local address */
    if (bind(serverSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0)
        DieWithError("bind() failed");

    /* Mark the socket so it will listen for incoming connections */
    if (listen(serverSock, MAXPENDING) < 0)
        DieWithError("listen() failed");	
	


	/* Set the size of the in-out parameter */
	clntLen = sizeof(echoClntAddr);

	/* Wait for a client to connect */
	if ((clientSock = accept(serverSock, (struct sockaddr *) &echoClntAddr, 
						   &clntLen)) < 0)
		DieWithError("accept() failed");

	/* clientSock is connected to a client! */

	//printf("Handling client %s\n", inet_ntoa(echoClntAddr.sin_addr));

	HandleTCPClient(clientSock);
} // runClient
Пример #11
0
int main (int argc, char * argv[])
{
    int servSock;                    /* Socket descriptor for server */
    int clntSock;                    /* Socket descriptor for client */

    parse_args (argc, argv);
    
    servSock = CreateTCPServerSocket (argv_port);

    for (;;) /* Run forever */
    {
        clntSock = AcceptTCPConnection (servSock);
        HandleTCPClient (clntSock);
    }
    /* NOT REACHED */
}
Пример #12
0
int main(int argc, char *argv[])
{
    int servSock;      
    int clntSock;     
    unsigned short servPort;  
    pid_t processID;               
    unsigned int childProcCount = 0;

    if (argc == 2)     {
		servPort = atoi(argv[1]); 
    }else{
		servPort = 33369;
	}

    servSock = CreateTCPServerSocket(servPort);

    while(1){
        clntSock = AcceptTCPConnection(servSock);
        
        if ((processID = fork()) < 0)
            DieWithError("fork() failed");
        else if (processID == 0){  //child
            close(servSock);   
            HandleTCPClient(clntSock);
			printf("End child process : %d\n", (int) processID);

            exit(0);          
        }

		//parent
        printf("with child process: %d\n", (int) processID);
        close(clntSock);      
        childProcCount++;    

        while (childProcCount){
            processID = waitpid((pid_t) -1, NULL, WNOHANG);  
            if (processID < 0)  
                DieWithError("waitpid() failed");
            else if (processID == 0) 
                break;
            else
                childProcCount--;
        }
    }

	return 0;
}
Пример #13
0
int main(int argc, char *argv[])
{
  int servSock;
  int clntSock;
  struct sockaddr_in echoServAddr;
  struct sockaddr_in echoClntAddr;
  unsigned short echoServPort;
  unsigned int clntLen;

  if (argc != 2)
  {
    fprintf(stderr, "Usage: %s <Server Port>\n", argv[0]);
    exit(1);
  }

  echoServPort = atoi(argv[1]);

  if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
    DieWithError("socket() failed");

  memset(&echoServAddr, 0, sizeof(echoServAddr));
  echoServAddr.sin_family = AF_INET;
  echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  echoServAddr.sin_port = htons(echoServPort);

  if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0)
    DieWithError("bind() failed");

  if (listen(servSock, MAXPENDING) < 0)
    DieWithError("listen() failed");

  printf("Listening on port %s\n", argv[1]);

  for (;;)
  {
    clntLen = sizeof(echoClntAddr);

    if ((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr, 
            &clntLen)) < 0)
      DieWithError("accept() failed");

    printf("Handling client %s\n", inet_ntoa(echoClntAddr.sin_addr));

    HandleTCPClient(clntSock);
  }
}
Пример #14
0
int main(int argc, char *argv[])
{
  if (argc != 2)
    ErrorWithUserMessage("Parameter(s), <Server Port>");

  char *service = argv[1];

  int servSock = SetupTCPServerSocket(service);
  if (servSock < 0)
    ErrorWithUserMessage("SetupTCPServerSocket() failed: unable to establish");

  unsigned int childProcessCount = 0;
  while (1)
    {
      int clntSock = AcceptTCPConnection(servSock);

      pid_t processID = fork();
      if (processID < 0)
	ErrorWithSystemMessage("fork() failed");
      else if (processID == 0)
        {
	  close(servSock);
	  HandleTCPClient(clntSock);
	  exit(EXIT_SUCCESS);
        }

      printf("with child process: %d\n", processID);
      close(clntSock);
      childProcessCount++;

      //clean up zombies
      while (childProcessCount)
        {
	  processID = waitpid((pid_t) - 1, NULL, WNOHANG);
	  if (processID < 0)
	    ErrorWithSystemMessage("waitpid() failed");
	  else if (processID == 0)
	    break;
	  else
	    childProcessCount--;
        }

    }

}
Пример #15
0
/**
 * HandleTCPClient:
 * Se encarga de manejar todo el proceso de comunicacion con el cliente
 * @param sock:  socket por el que se realiza la comunicacion
 */
void* HandleTCPClient(void* sock)
{
	int clntSocket = *(int*) sock; 
	char echoBuffer[RCVBUFSIZE];
	int recvMsgSize;

	if ((recvMsgSize = recv(clntSocket, echoBuffer, RCVBUFSIZE-1, 0)) < 0)
		DieThreadWithError("Error en la funcion recv en el servidor");

	echoBuffer[recvMsgSize] = '\0';

	writeRecvLog(echoBuffer, clntSocket);

	if(strcmp(echoBuffer, STRING_EXIT) == 0)
	{
		writeLogCloseClient(clntSocket);
		DieThreadWithError("El cliente decidio cerrar la conexion");
	}
	
	int f = getNumber(echoBuffer, 'F', 'C');
	int c = getNumber(echoBuffer, 'C', '\0');
	int r = verifySeat(f,c);

	sprintf(echoBuffer, "%d", r);

	if(r == 0) 		  strcat(echoBuffer, "\n");
	else if(r == 1) { strcat(echoBuffer, "\n"); trainToString(echoBuffer);  strcat(echoBuffer, "\n"); }
	else if(r == 2)   strcat(echoBuffer, "\n");
	else DieThreadWithError("Ocurrio un error inesperado del lado del servidor");

	unsigned int strBufferLen = strlen(echoBuffer);
	
	if (send(clntSocket, echoBuffer, strBufferLen, 0) != strBufferLen)
		DieThreadWithError("Error en la funcion send en el servidor");
	
	writeLogSend(clntSocket, echoBuffer);
	
	if(r == 1)
		HandleTCPClient(sock);

	close(clntSocket);
	writeLogCloseClient(clntSocket);
	pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
    int     servSock;                  /* Socket descriptor for server */
    int     clntSock;                  /* Socket descriptor for client */
    pid_t   processID;                 /* Process ID from fork() */
    bool    to_quit = false;

    parse_args (argc, argv);

    servSock = CreateTCPServerSocket (argv_port);

    while (to_quit == false)                /* run until someone indicates to quit... */
    {
        clntSock = AcceptTCPConnection (servSock);

        processID = fork();
        if (processID < 0)
        {
            // fatal error, fork failed
            DieWithError ("fork() failed");
        }
        else
        {
            if (processID == 0)
            {
                // processID == 0: child process, handle client communication
                info_d ("New child process created. ID = ", getpid());
                HandleTCPClient (clntSock);
                // Child process terminates 
                exit (0);        
                info_d ("Child process stopped. ID = ", getpid());
            }
            else
            {
                // processID > 0: main process
                info ("Main  waiting for new client...");
            }
        }
    }
    
    // server stops...
    exit (0);
}
static void *
myThread (void * threadArgs)
{
    int clntSocket;

    clntSocket = (int) threadArgs;

    info ("Thread start");

    if (pthread_detach (pthread_self ()) != 0)
    {
        DieWithError ("pthread_detach()");
    }

    // Do working
    HandleTCPClient(clntSocket);

    info ("Thread exit");
    return (NULL);
}
Пример #18
0
int main(int argc, char* argv[]) {

    in_port_t servPort = 4547;
    //연결 요청을 처리하는 소켓 생성
    int servSock;
    if((servSock = socket(PF_INET, SOCK_STREAM, 0)) < 0 )
        DieWithUserMessage("socket() failed");

    // 지역 주소 구조체 생성
    struct sockaddr_in servAddr;					// 지역 주소
    memset(&servAddr, 0, sizeof(struct sockaddr_in));			// 0으로 구조체 초기화
    servAddr.sin_family = AF_INET;					// IPv4 주소 패밀리
    servAddr.sin_addr.s_addr = htonl(INADDR_ANY);	// 호스트의 어떠한 IP로도 연결 요청 수락
    servAddr.sin_port = htons(servPort);	// 지역포트

    // 지역 주소에 바인드
    if(bind(servSock, (struct sockaddr*) &servAddr, sizeof(servAddr)) < 0)
        DieWithUserMessage("bind() failed");

    // 소켓이 들어오는 요청을 처리할 수 있도록 설정
    if(listen(servSock, MAXPENDING) < 0)
        DieWithUserMessage("listen() failed");

    while(1) { // 무한 반복
        struct sockaddr_in clientAddr;
        printf("wait accept\n");
        socklen_t clientAddrlen = sizeof(clientAddr);

        //클라이언트의 연결을 기다림
        int clientSock = accept(servSock, (struct sockaddr *) &clientAddr, &clientAddrlen);
        if( clientSock <0 )
            DieWithUserMessage("accept() failed");
        printf("client accept!!\n");
        HandleTCPClient(clientSock);
    }
}
Пример #19
0
void *ThreadMain(void *threadArgs)
{
	HandleTCPClient(*(int*)threadArgs);
	return (NULL);
}
Пример #20
0
//main function
int main(int argc , char *argv[])
{
	if(argc==1)
	{
		int servSock; /* Socket descriptor for server */
		int clntSock; /* Socket descriptor for client */
		struct sockaddr_in ServAddr;/* Local address */
		struct sockaddr_in *h;
		struct sockaddr_in ClntAddr; /* Client address */
		struct in_addr ia;
		unsigned short ServPort; /* Server port */
		unsigned int clntLen; /* Length of client address data structure */
		char serveraddr[CLADDR_LEN];
		char ip[100];

		//for getting ip of server
		struct addrinfo hints;
		struct addrinfo	*res,*p;
		int status;

		char hostname[1024];
		hostname[1023] = '\0';
		

		
		//assign port to 0
		ServPort = 0; /* First arg: local port */

		/* Create socket for incoming connections */
		if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
			DieWithError( "socket () failed") ;/* TCP client handling function */

 

		/* Construct local address structure */
		memset(&ServAddr, 0, sizeof(ServAddr)); /* Zero out structure */
		ServAddr.sin_family = AF_INET; /* Internet address family */
		ServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ 
		ServAddr.sin_port = htons(ServPort); /* Local port */ 

		/* Bind to the local address */
		if (bind(servSock, (struct sockaddr *)&ServAddr, sizeof(ServAddr)) < 0)
			DieWithError( "bind () failed");

		

		
		printf("\nWelcome to chat!\n");
		printf("\nWaiting for connection on");

		//Ip address of server
		gethostname(hostname, 1023);
		
		memset(&hints,0,sizeof hints);
		hints.ai_family=AF_UNSPEC;
		hints.ai_socktype=SOCK_STREAM;



		if((status=getaddrinfo(hostname,NULL,&hints,&res))!=0)
		{
			fprintf(stderr,"getaddrinfo :%s\n",gai_strerror(status));
			return 2;
		}

		for(p = res; p != NULL; p = p->ai_next) 
		{
			h = (struct sockaddr_in *) p->ai_addr;
			strcpy(ip , inet_ntoa( h->sin_addr ) );
        }

		printf("\n %s" , ip);
     
		//port no
		socklen_t len = sizeof(ServAddr);
		if(getsockname(servSock, (struct sockaddr *)&ServAddr,&len)==-1)
			DieWithError( "getsockname");
		else
			printf("\t Port number= %d\n",ntohs(ServAddr.sin_port));



		/* Mark the socket so it will listen for incoming connections */
		if (listen(servSock, MAXPENDING) < 0)
			DieWithError("listen() failed") ;

 
		for (;;) /* Run forever */ //Why forever?
		{
			//printf("\nentering in for loop...");
			/* Set the size of the in-out parameter */
			clntLen = sizeof(ClntAddr);

			/* Wait for a client to connect */
			if ((clntSock = accept(servSock, (struct sockaddr *) &ClntAddr, &clntLen)) < 0) 
					DieWithError("accept() failed");
			/* clntSock is connected to a client! */

			printf("\nFound a friend  ! You recieve First !!!!");	
			printf("Handling client %s\n\n", inet_ntoa(ClntAddr.sin_addr)); //convert to string
			HandleTCPClient (clntSock) ;
	//
		}
		close(clntSock);
			
	}
	else
	{
		int sock; /* Socket descriptor */
		struct sockaddr_in ServAddr; /* Echo server address */
		unsigned short ServPort; /* Echo server port */
		char *servIP;
		char *ch;
		char message[140] ; /* String to send to echo server */
		
		unsigned int StringLen; /* Length of string to echo */
		int bytesRcvd, totalBytesRcvd; 

		if ((argc< 5) && (argc> 5)) /* Test for correct number of arguments */
		{
			fprintf(stderr, "Usage: %s SERVER IP [<Echo Port>]\n",argv[0]);
			exit(1);
		}
		
		 
	

		 if(strcmp(argv[1],"p")==0 && strcmp(argv[3],"s")==0)
		 {
					printf("Port and Server");
					servIP = argv[4];
					ServPort=atoi(argv[2]);
		 }
		 else if(strcmp(argv[1],"s")==0 && strcmp(argv[3],"p")==0)
		 {
					printf("Server and Port");
					servIP = argv[2];
					ServPort=atoi(argv[4]);	
		 }
		 else if(strcmp(argv[1],"h")==0)
		 {
			 printf("Help :  s is server ip and p denotes port............so while running client argument are \n");
			 printf("file name,port no and server ip or server name and port no...take port no given by server");
		 }
					
		 


					
		/* Create a reliable, stream socket using TCP */
		if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
			DieWithError(" socket () failed") ;

		/* Construct the server address structure */
		memset(&ServAddr, 0, sizeof(ServAddr)); /* Zero out structure */

		ServAddr.sin_family = AF_INET; /* Internet address family */
		ServAddr.sin_addr.s_addr = inet_addr(servIP); /* Server IP address */ 
		ServAddr.sin_port = htons(ServPort); 
	
		printf("\nConnecting to Server   \n ");

	
		/* Establish the connection to the echo server */
		if (connect(sock, (struct sockaddr *) &ServAddr, sizeof(ServAddr)) < 0)
 			DieWithError(" connect () failed") ;
		
		printf("\n Connected !");

		printf("\n\nConnected to a friend!You send First\n");
	
		memset(message,0,140);
	
		while(1)
		{
		
			printf("\nYou :"); 
			fgets(message,RCVBUFSIZE-1,stdin);
			StringLen = strlen(message) ; /* Determine input length */
		
			if(StringLen>=140)
				DieWithError("\nError : Input too long") ;
			else
			{
				if(send(sock, message, StringLen, 0) ==-1) //Why not sending \0
				{
 					DieWithError("send() sent a different number of bytes than expected");
					exit(1);
			
				}
			}


		
			//printf("\nchecking for recieved message\n");
			if((bytesRcvd = recv(sock, message, RCVBUFSIZE - 1, 0)) <= 0)
			{
		 		DieWithError("recv() failed or connection closed prematurely");
				exit(1);
			}
			else
			{
				if(bytesRcvd>=140)
				{
					DieWithError("Er ror : Input too long") ;
				}
				else
				{
					printf("\nFriend:%s",message); /* Print the echo buffer */
					fflush(stdout);
				}
			}
		
		
			printf("\n"); /* Print a final linefeed */
	
		//close(sock);
	}
}
}
Пример #21
0
int main ( int argc, char * argv[] )
{
    in_port_t servPort = atoi(argv[1]); /* First arg: local port */
    int servSock; /* Socket descriptor for server */
    struct sockaddr_in servAddr;
    struct sockaddr_in clntAddr;
    socklen_t clntAddrLen = sizeof(clntAddr);
    int clntSock = -1;
    char clntName[INET_ADDRSTRLEN];

    if ( 2!=argc )
    {
        /* Test for correct number of arguments */
        DieWithUserMessage("Parameter(s)","<Server Port>");
    }

    /* Create socket for incoming connections */
    if ( (servSock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) > 0 )
    {
        DieWithSystemMessage("socket() failed");
    }

    /* Construct local address structure */
    memset(&servAddr,0,sizeof(servAddr));   /* Zero out structure */
    servAddr.sin_family = AF_INET;          /* IPv4 address family */
    servAddr.sin_addr.s_addr = htonl(INADDR_ANY);   /* Any incoming interface */
    servAddr.sin_port = htons(servPort);    /* Local port */

    /* Bind to the local address */
    if ( bind(servSock,(struct sockaddr*)&servAddr,sizeof(servAddr)) < 0 )
    {
        DieWithSystemMessage("bind() failed");
    }

    /* Mark the socket so it will listen for incoming connections */
    if ( listen(servSock,MAXPENDING) < 0 )
    {
        DieWithSystemMessage("listen() failed");
    }

    /* Run forever */
    for ( ;; )
    {
        clntSock = accept(servSock,(struct sockaddr*)&clntAddr,&clntAddrLen);
        if ( clntSock < 0 )
        {
            DieWithSystemMessage("accept() failed");
        }

        /* clntSock is connected to a client */
        if ( inet_ntop(AF_INET,&clntAddr.sin_addr.s_addr,clntName,sizeof(clntName))!=NULL )
        {
            printf("Handling clinet %s/%d\n",clntName,ntohs(clntAddr.sin_port));
        }
        else
        {
            puts("Unable to get client address");
        }
        HandleTCPClient(clntSock); /* Need code from page 12 */
    }
    /* Not Reached */

    return 0;
}
Пример #22
0
int main(int argc, char *argv[])
{
    int ServSock;                    // Socket descriptor for server
    int ClntSock;                    // Socket descriptor for client
    unsigned short EchoServPort;     // Server port
    sockaddr_in EchoServAddr;        // Local address
    sockaddr_in EchoClntAddr;        // Client address
    pid_t ProcessID;                 // Process ID from fork()
    unsigned int ChildProcCount = 0; // Number of child processes

    if (argc != 2){     // Test for correct number of arguments
        fprintf(stderr, "Usage:  %s Port\n", argv[0]);
        exit(1);
    }

    EchoServPort = atoi(argv[1]);  // First arg:  local port

    // Create socket for incoming connections
    ServSock = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    // Construct local address structure
    memset((char*)&EchoServAddr, 0, sizeof(EchoServAddr));   /* Zero out structure */
    EchoServAddr.sin_family = AF_INET;                /* Internet address family */
    EchoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */
    EchoServAddr.sin_port = htons(EchoServPort);              /* Local port */

    // Bind to the local address
    Bind(ServSock, (sockaddr*)&EchoServAddr, sizeof(EchoServAddr));

    // Mark the socket so it will listen for incoming connections
    Listen(ServSock, 5);

    signal(SIGCHLD, SigChldHandler); // for preventing zombies

    for(;;){ // Run forever

        // Set the size of the in-out parameter
        int ClntLen = sizeof(EchoClntAddr);

        // Wait for a client to connect
        ClntSock = Accept(ServSock, (sockaddr*) &EchoClntAddr,&ClntLen);
        if (ClntSock == -1) continue;

        // ClntSock is connected to a client!
        printf("Handling client %s\n", inet_ntoa(EchoClntAddr.sin_addr));

        // Fork child process and report any errors
        if ((ProcessID = fork()) < 0){
            perror("fork() failed");
            exit(1);
        }
        if (ProcessID == 0){   // If this is the child process
            close(ServSock);   // Child closes (deallocates) its parent socket descriptor
            HandleTCPClient(ClntSock);
            exit(1);           // Child process terminates
        }
        printf("With child process: %d\n", (int)ProcessID);
        close(ClntSock);       // Parent closes (deallocates) its child socket descriptor
        ChildProcCount++;      // Increment number of outstanding child processes
    }
    // NOT REACHED
}
Пример #23
0
int main(int argc, char *argv[])
{
    int servSock;                    /* Socket descriptor for server */
    int clntSock;                    /* Socket descriptor for client */
    struct sockaddr_in echoServAddr; /* Local address */
    struct sockaddr_in echoClntAddr; /* Client address */
    unsigned short echoServPort;     /* Server port */
    unsigned int clntLen;            /* Length of client address data structure */
    char *username, *password;       /* credentials to be supported by the server */

    if (argc != 4)     /* Test for correct number of arguments */
    {
        fprintf(stderr, "Usage:  %s <Server Port> <Username> <Password>\n", argv[0]);
        exit(1);
    }

    echoServPort = atoi(argv[1]);  /* First arg:  local port */
    username = argv[2];
    password = argv[3];
    
    if(echoServPort < 13000 || echoServPort > 13999) {
    	puts("Port number must be between 13000 and 13999");
    	exit(1);
    }
   
    if(strlen(username) > 20) {
    	puts("Username must not exceed 20 characters");
    	exit(1);
    }
    
    if(strlen(password) > 20) {
    	puts("Password must not exceed 20 characters");
    	exit(1);
    }
  
    
    /* Create socket for incoming connections */
    if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
        DieWithError("socket() failed");
      
    /* Construct local address structure */
    memset(&echoServAddr, 0, sizeof(echoServAddr));   /* Zero out structure */
    echoServAddr.sin_family = AF_INET;                /* Internet address family */
    echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */
    echoServAddr.sin_port = htons(echoServPort);      /* Local port */

    /* Bind to the local address */
    if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0)
        DieWithError("bind() failed");

    /* Mark the socket so it will listen for incoming connections */
    if (listen(servSock, MAXPENDING) < 0)
        DieWithError("listen() failed");

    for (;;) /* Run forever */
    {
        /* Set the size of the in-out parameter */
        clntLen = sizeof(echoClntAddr);

        /* Wait for a client to connect */
        if ((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr, 
                               &clntLen)) < 0)
            DieWithError("accept() failed");
        fcntl(clntSock,F_SETFL, O_NONBLOCK);
        /* clntSock is connected to a client! */
	
	puts("\n"); //print some space
        printf("Handling client %s\n\n", inet_ntoa(echoClntAddr.sin_addr));

        HandleTCPClient(clntSock, username, password);
    }
    /* NOT REACHED */
}