Thread: Using _kbhit() in a console window.

  1. #1
    Registered User
    Join Date
    Dec 2001
    Posts
    34

    Using _kbhit() in a console window.

    This code is for a server. This question is about the code shown in red. I am wanting to add the ability to display stats in real-time when the 's' key is pressed. The code I added only seems to display at random intervals when the 's' key is pressed.

    Am I using the _kbhit() function correctly? Can I use _kbhit() in this tight loop? Other ideas?

    Code:
    int main(int argc,char *argv[])
    {
    	SOCKET s;
    	SOCKET ss;
    	struct hostent *hp;
    	struct sockaddr_in any_addr;
    	struct sockaddr_in remote_addr;
    	int addrlen;
    	THREADARGS ThreadArgs;
    
    
    	s = INVALID_SOCKET;
    	hp = NULL;
    	CLEAR_ADDR(&any_addr);
    	CLEAR_ADDR(&remote_addr);
    	addrlen = sizeof(struct sockaddr_in);
    
    	if(argc < 2)
    	{
    		printf("usage: %s port [-Ln]\n",argv[0]);
    		printf("-L: verbose level; 1, 2 or 3\n");
    		return 0;
    	} 
    
    	ThreadArgs.VerboseLevel = 0;
    	while (argc--)
    	{
    		if (!strncmp(argv[argc], "-L", 2))
    			ThreadArgs.VerboseLevel = atoi(argv[argc]+2);
    	}
    
    	sockInit();
    
    	/* specifies host and port */
    	any_addr.sin_family = AF_INET;
    	//any_addr.sin_port=htons( (unsigned short) atoi(argv[1]));
    	any_addr.sin_port=htons(atoi(argv[1]));
    
    
    	/* accepts connections from any client */
    	any_addr.sin_addr.s_addr=htonl ( INADDR_ANY );
    
    	/* creates socket */
    	s = socket(AF_INET,SOCK_STREAM,0);
    
    	if (s == INVALID_SOCKET)
    	{
    		printf("Can't create socket\n");
    		sockEnd();
    		return 2;
    	}
    	
    	/* links socket to address and port */
    	if(bind(s,(struct sockaddr *) &any_addr, sizeof(struct sockaddr_in)))
    	{
    		printf("Can't bind socket to address\n");
    		sockEnd();
    		return 3;
    	}
    
    	if ((fp = fopen("c:/winsock.txt", "w")) != NULL)
    	{
    		/* listens on port; maximum 5 requests pending */ 
    		listen(s, 5);
    
    		for( ; ; )
    		{
    			/* when someone connects, create a new socket for data exchange */
    			ss=accept(s, (struct sockaddr *) &remote_addr, &addrlen);
    			memcpy(&ThreadArgs.ss, &ss, sizeof(ss));
    
    			if (_beginthread(serverThread,0,(void *) &ThreadArgs) == -1)
    			{
    				perror("_beginthread failed");
    				break;
    			}
    			
    			/* DEBUG MODE: show real-time stats when a key is pressed */
    			if(_kbhit())
    			{
    				switch (_getch())
    				{
    				case 's':
    					printf("Bytes Received: %ld\n",TotalBytesRecv);
    					break;
    
    				/* more options to follow */
    				}
    			}		
     
    		}
    		
    		fclose(fp);
    
    	} /* fopen() */
    
    
    	sockEnd();
    
    	return 0;
    }
    tia,

    clu

  2. #2
    End Of Line Hammer's Avatar
    Join Date
    Apr 2002
    Posts
    6,231
    The code will block on the accept() call. Is that your problem?
    When all else fails, read the instructions.
    If you're posting code, use code tags: [code] /* insert code here */ [/code]

  3. #3
    Registered User
    Join Date
    Dec 2001
    Posts
    34
    Yes, that seems to be it. Thanks for pointing that out Hammer.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. SDL Window opening with Console Window
    By carrotcake1029 in forum Windows Programming
    Replies: 2
    Last Post: 12-23-2008, 03:32 PM
  2. WM_CAPTION causing CreateWindowEx() to fail.
    By Necrofear in forum Windows Programming
    Replies: 8
    Last Post: 04-06-2007, 08:23 AM
  3. creating a child window
    By rakan in forum Windows Programming
    Replies: 2
    Last Post: 01-23-2007, 03:22 PM
  4. 6 measly errors
    By beene in forum Game Programming
    Replies: 11
    Last Post: 11-14-2006, 11:06 AM
  5. opengl code not working
    By Unregistered in forum Windows Programming
    Replies: 4
    Last Post: 02-14-2002, 10:01 PM