Thread: multiplexing help

  1. #1
    Registered User
    Join Date
    Nov 2006
    Posts
    38

    Unhappy multiplexing help

    can any one help tell me if this code will work or if im barking up the wrong tree

    Code:
    #include <stdio.h>      /* for printf() and fprintf() */
    #include <sys/socket.h> /* for socket(), bind(), and connect() */
    #include <arpa/inet.h>  /* for sockaddr_in and inet_ntoa() */
    #include <stdlib.h>     /* for atoi() and exit() */
    #include <string.h>     /* for memset() */
    #include <unistd.h>     /* for close() */
    #include <sys/wait.h>       /* for waitpid() */
    #include <sys/time.h>       /* for struct timeval {} */
    #include <fcntl.h>          /* for fcntl() */
    
    int main(int argc, char *argv[])
    {
        
    	
    	int *servSock;                   /* Socket descriptors for server */
        int maxDescriptor;               /* Maximum socket descriptor value */
        fd_set sockSet;                  /* Set of socket descriptors for select() */
        long timeout;                    /* Timeout value given on command-line */
        struct timeval selTimeout;       /* Timeout for select() */
        int running = 1;                 /* 1 if server should be running; 0 otherwise */
        int noPorts = 11;                /* Number of port specified on command-line */
        int port;                        /* Looping variable for ports */
        unsigned short portNo;           /* Actual port number */
    	char clientname[i][3]            /* to give names to clients*/
    	char command[6]                  /* for the users command*/ 
    	char client_choice[6]            /* for the users choice of finger*/
        
    	
    	if (argc < 3)     /* Test for correct number of arguments */
        {
            fprintf(stderr, "Usage:  %s <Timeout (secs.)> <Port 1> ...\n", argv[0]);
            exit(1);
        }
    
        timeout = atol(argv[1]);        /* First arg: Timeout */
        noPorts = argc - 2;             /* Number of ports is argument count minus 2 */
    
        /* Allocate list of sockets for incoming connections */
        servSock = (int *) malloc(noPorts * sizeof(int));
       
    	/* Initialize maxDescriptor for use by select() */
        maxDescriptor = -1;
      
        /* Create list of ports and sockets to handle ports */
        for (port = 0; port < noPorts; port++)
        {
            /* Add port to port list */
            portNo = atoi(argv[port + 2]);  /* Skip first two arguments */
    
            /* Create port socket */
            servSock[port] = CreateTCPServerSocket (portNo);
    //
    //			if ((servSock = socket(PF_INET,/*use ip protocol*/ SOCK_STREAM, IPPROTO_TCP/* using tcp*/)) < 0)
    //			DieWithError("socket() failed");*/
    //		  
    //			/* Construct local address structure */
    //			 memset(&echoServAddr, 0, sizeof(serveraddress));   /* 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(serverport);      /* 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! */
    
            
    		
    		/* Determine if new descriptor is the largest */
            if (servSock[port] > maxDescriptor)
                maxDescriptor = servSock[port];
        }
    
        printf("Starting server:  Hit return to shutdown\n");
        while (running)
        {
            /* Zero socket descriptor vector and set for server sockets */
            /* This must be reset every time select() is called */
            FD_ZERO(&sockSet);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  /* Add keyboard to descriptor vector */
            FD_SET(STDIN_FILENO, &sockSet);
            for (port = 0; port < noPorts; port++)
                FD_SET(servSock[port], &sockSet);
    
            /* Timeout specification */
            /* This must be reset every time select() is called */
            selTimeout.tv_sec = timeout;       /* timeout (secs.) */
            selTimeout.tv_usec = 0;            /* 0 microseconds */
    
            /* Suspend program until descriptor is ready or timeout */
            if (select(maxDescriptor + 1, &sockSet, NULL, NULL, &selTimeout) == 0)
                printf("No echo requests for %ld secs...Server still alive\n", timeout);
            else 
            {
                if (FD_ISSET(0, &sockSet)) /* Check keyboard */
                {
                    printf("Shutting down server\n");
                    getchar();
                    running = 0;
                }
    
                for (port = 0; port < noPorts; port++)
                    if (FD_ISSET(servSock[port], &sockSet))
                    {
                        printf("Request on port %d:  ", port);
                        HandleTCPClient(AcceptTCPConnection(servSock[port]));
    
    //ip address need to be changed 
    					if (echoClntAddr == 192.168.10.1)
    					{client name[0] == r1;}
    					if echoClntAddr == 192.168.10.2)
    					{clientname[1] == r2;}
    					if (echoClntAddr == 192.168.10.3)
    					{ client name[2] == r3;}
    					if (echoClntAddr == 192.168.10.4)
    					{ client name[3] == r4;}
    					if (echoClntAddr == 192.168.10.5)
    					{ client name[4] == r5;}
    
    					if (echoClntAddr == 192.168.11.1)
    					{ client name[5] == l1;}
    					if (echoClntAddr == 192.168.11.2)
    					{ client name[6] == l2;}
    					if (echoClntAddr == 192.168.11.3)
    					{ client name[7] == l3;}
    					if (echoClntAddr == 192.168.11.4)
    					{ client name[8] == l4;}
    					if (echoClntAddr == 192.168.11.5)
    					{ client name[9] == l5;}
    
    					// printf ("please enter the finger you wish to move(r1-5 or l1-5 )");
    					//	scanf(client_choice);
    					
    
    					//printf ("do you wish to open or close");
    					//scanf (command);
    
    					// need to add the pain comand (read from client then send to all clients on subnet
    					
    					/*if (client_choice == r1)
    						{
    							select(client_name1)
    							if (send(command, echoBuffer, recvMsgSize, 0) != recvMsgSize)
    						    DieWithError("send() failed");
    							close socket
    						}
    						repeat for all 10 clients
    
                    }
            }
        }
    
        /* Close sockets */
        for (port = 0; port < noPorts; port++)
            close(servSock[port]);
    
        /* Free list of sockets */
        free(servSock);
    
        exit(0);
    }
    the client is like this

    Code:
    #include <stdio.h>      /* for printf() and fprintf() */
    #include <sys/socket.h> /* for socket(), connect(), send(), and recv() */
    #include <arpa/inet.h>  /* for sockaddr_in and inet_addr() */
    #include <stdlib.h>     /* for atoi() and exit() */
    #include <string.h>     /* for memset() */
    #include <unistd.h>     /* for close() */
    #include <fcnt1.h>      /*for read only */
    #define RCVBUFSIZE 32   /* Size of receive buffer */
    
    void DieWithError(char *errorMessage);  /* Error handling function */
    
    int main(int argc, char *argv[])
    {
        int sock;                        /* Socket descriptor */
        struct sockaddr_in echoServAddr; /* Echo server address */
        unsigned short echoServPort;     /* Echo server port */
        char *servIP;                    /* Server IP address (dotted quad) */
        char *command;                /* String to send to echo server */
        char echoBuffer[RCVBUFSIZE];     /* Buffer for echo string */
        unsigned int commandLen;      /* Length of string to echo */
        int bytesRcvd, totalBytesRcvd;   /* Bytes read in single recv() 
                                            and total bytes read */
    
        if ((argc < 3) || (argc > 4))    /* Test for correct number of arguments */
        {
           fprintf(stderr, "Usage: %s <Server IP> <command> [<Echo Port>]\n",
                   argv[0]);
           exit(1);
        }
    
        servIP = argv[1];             /* First arg: server IP address (dotted quad) */
        command = argv[2];         /* Second arg: string to echo */
    
        if (argc == 4)
            echoServPort = atoi(argv[3]); /* Use given port, if any */
        else
            echoServPort = 7;  /* 7 is the well-known port for the echo service */
    
        /* 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(&echoServAddr, 0, sizeof(echoServAddr));     /* Zero out structure */
        echoServAddr.sin_family      = AF_INET;             /* Internet address family */
        echoServAddr.sin_addr.s_addr = inet_addr(servIP);   /* Server IP address */
        echoServAddr.sin_port        = htons(echoServPort); /* Server port */
    
        /* Establish the connection to the echo server */
        if (connect(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0)
            DieWithError("connect() failed");
    
        commandLen = strlen(command);          /* Determine input length */
    
    while command != "end"
    {
        /* Receive a string back from the server */
        totalBytesRcvd = 0;
        printf("Received: ");                /* Setup to print the echoed string */
        while (totalBytesRcvd < commandLen)
        {
            /* Receive up to the buffer size (minus 1 to leave space for
               a null terminator) bytes from the sender */
            if ((bytesRcvd = recv(sock, echoBuffer, RCVBUFSIZE - 1, 0)) <= 0)
                DieWithError("recv() failed or connection closed prematurely");
            
    		totalBytesRcvd += bytesRcvd;   /* Keep tally of total bytes */
            echoBuffer[bytesRcvd] = '\0';  /* Terminate the string! */
            printf("%s", echoBuffer);      /* Print the echo buffer */
    
    		//+++++++++++++++++++++++++++++++++++++++++++++++++
    		
    		
    		
    		if command == "pain";
    			{
    				/* Send the string to the server */
    				if (send(sock, command, commandLen, 0) != commandLen)
    				DieWithError("send() sent a different number of bytes than expected");
    			}
    		if command == "open";
    			{	
    				FILE fopen(pic1.jpg, O_RDONLY);/*print pic1(hand open)*/
    			}
    		if command == "close";
    			{
    				FILE fopen(pic2.jpg, O_RDONLY);/*print pic2 (hand closed)*/
    			}
    		 FILE fclose();
        }
    
        printf("\n");    /* Print a final linefeed */
    }
        close(sock);
        exit(0);
    }
    sorry about the long post

    the server should be able to connect to all clients and then ask for a client to connect to and an command to send to it (think of it like a set of fingers as clients and the server is the brain
    the client shold recive a message from the server and use that message to print a picture file to the screen

    can any one tell me if this is right or what i need to do to fix it all my lecturers have vanished over the "easter" break and im at my wits end

    thanks

  2. #2
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,659
    Start again with a small program which compiles with only a couple of errors.

    There are many systemic (the same thing over and over) errors in the code you posted, including
    > if command == "pain";
    > if (echoClntAddr == 192.168.11.4)
    > FILE fopen(pic2.jpg, O_RDONLY);
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Multiplexing read socket and stdin
    By redcameron in forum Networking/Device Communication
    Replies: 8
    Last Post: 04-06-2009, 05:34 PM
  2. multiplexing
    By kaijuu in forum C Programming
    Replies: 0
    Last Post: 03-29-2008, 06:47 AM
  3. asynchronized I/O == multiplexing I/O?
    By George2 in forum C Programming
    Replies: 1
    Last Post: 07-24-2006, 10:06 AM
  4. Multiplexing bitplanes into bytes
    By SMurf in forum C Programming
    Replies: 9
    Last Post: 11-16-2005, 08:56 PM
  5. accept() Hangs
    By Epo in forum Networking/Device Communication
    Replies: 14
    Last Post: 09-09-2005, 11:53 AM