Looping problems socket programming in C


 
Thread Tools Search this Thread
Top Forums Programming Looping problems socket programming in C
# 8  
Old 08-07-2011
So ya mean I need to remove the close socket?
I've tried commenting it and found out that it's the read data problem is that true.
I'm not really familiar with the C programming commands so kinda confused with it.
Mind guiding me along?

Code:
while (1) /* Loop forever */

      {

        /* Accept a client connection */

        clientFd = accept (serverFd, clientSockAddrPtr, &clientLen);
	



        //if (fork () == 0) /* Create child to send recipe */

          //{

            
	    readData();

            bzero(country,300);

            c=read(clientFd,country,300);

	    printf("You have entered: %s\n",country);

            printf ("%s Capital       : %s\n", country,getCapital(country));

            printf ("%s Currency Code : %s\n", country,getCurrencyCode(country));

            char* capital = getCapital (country);

	    char* currency = getCurrencyCode(country);



            //close (clientFd); /* Close the socket */

           //exit (/* EXIT_SUCCESS */ 0); /* Terminate */

          //}

        //else

          //close (clientFd); /* Close the client descriptor */

      }

   }

Readdata function

Code:
void readData ()

{

	FILE * pFile;

	NoOfRecordsRead = 0;

   	char buffer [Line_Char_Buffer_Size];



	pFile = fopen (INPUT_FILE_NAME , "r");

   

	if (pFile == NULL) 

		perror ("Error opening file 'Countries.txt' !");

	else

	{

		while ( !feof (pFile) )

     	{

			char* aLine = get_line (buffer, Line_Char_Buffer_Size, pFile);



			if (aLine != NULL)

			{

				globalCountryDataArray [NoOfRecordsRead++] = createCountryRecord (aLine);

			}

     	}



     fclose (pFile);

	

	}

}

# 9  
Old 08-07-2011
nooo. you do need to loop to accept new connections. maybe something like (untested):

Code:
while (1) /* Loop forever */
{
	/* Accept a client connection */
	clientFd = accept(serverFd, clientSockAddrPtr, &clientLen);

	if (fork () == 0) /* Create child to read */
	{
		readData();
		memset(country, 0, 300);
		while ((c = read(clientFd, country, 300)) > 0)
		{
			char *capital = getCapital(country);
			char *currency = getCurrencyCode(country);

			printf("You have entered: %s\n",country);
			printf ("%s Capital       : %s\n", country, capital);
			printf ("%s Currency Code : %s\n", country, currency);
		}
		perror("read");
		close(clientFd);	/* Close the socket */
		exit(0);		/* Terminate child */
	} else {
		perror("fork");
		close(clientFd);	/* Close the client descriptor */
	}
}

This User Gave Thanks to neutronscott For This Post:
# 10  
Old 08-08-2011
It works thanks!! But got a slight problem
The list of output has shown.
I've tried typing the input lets say, Vietnam.
It works for the first time.
The 2nd time I typed Singapore, it works too.
However on the 3rd try, I typed Vietnam again.
It shows Vietnamre which shows that it cannot be found and the re of the previously Singapore is added behind Vietnam.
I've tried entered Netherlands and it works.
When I typed back Vietnam again the letters behind is added with ands.

I've declared the char country to 300 but it' still not working thoughSmilie

Code:
Please enter country name > Vietnam
Please enter country name > Singapore
Please enter country name > Vietnam
Please enter country name > Netherlands


You have entered: Vietnam
Vietnam Capital       : Hanoi
Vietnam Currency Code : VND
You have entered: Singapore
Singapore Capital       : Singapore
Singapore Currency Code : SGD
Country 'Vietnamre' not found!
Country 'Vietnamre' not found!
You have entered: Vietnamre
Vietnamre Capital       : (null)
Vietnamre Currency Code : (null)
You have entered: Netherlands
Netherlands Capital       : Amsterdam
Netherlands Currency Code : EUR
You have entered: Vietnamands
Vietnamands Capital       : (null)
Vietnamands Currency Code : (null)

# 11  
Old 08-08-2011
Ah yes of course. You will want the memset() also at the end of that while loop. Or, at beginning you may do country[c]=0 to null terminate it there.

Also while thinking about it, is best to use sizeof(country) in place of the 300 in memset and read. You want to also save 1 byte for NUL termination so in read() replace 300 with "sizeof(country)-1" this is so that if you ever change the size, you only need to change it in 1 place. The rest is taken care of by the compiler.

Last edited by neutronscott; 08-08-2011 at 02:36 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Looping connect call for a non blocking socket

will there be any unexpected results on looping connect call for a non blocking socket to determine the connection based on error code. I am getting connection unsuccessful intermittently and so wondering whether is the timeout 500 millisec not sufficient or looping connect cause any unexpected. ... (7 Replies)
Discussion started by: satish@123
7 Replies

2. Programming

socket programming

how to include socket.h in visual studio 2005.. (2 Replies)
Discussion started by: asd123
2 Replies

3. Programming

socket accept() keeps looping

I'm using C/ C++ with gcc on Linux. I've a server socket where accept() is called on the socket inside a while() loop. The problem I am facing is that the first call to accept is blocking (i.e., the program waits for the first connection) but as soon as I fork afterwards (so that the child process... (2 Replies)
Discussion started by: jaywalker
2 Replies

4. Programming

Please help! accept function problems in Socket programming

Hi, I have a client-server socket program. It has been working fine for over a year, but recently it started to show strange behavior.:confused: After the server program runs for a while, it will show in the top command saying it is using lots of CPU, MEM. I assume it means the server code is... (1 Reply)
Discussion started by: natxie
1 Replies

5. Programming

help regarding socket programming

i m using sockets for setting up a connection between a server and a client. When the clients gets connected to the server, its ip is conveyed to the server through one of the predefined structures in c library... i save this ip address in an array....1st client's ip address goes to the zeroth... (1 Reply)
Discussion started by: abmxla007
1 Replies

6. IP Networking

socket programming

Hello Everyone Iam working on tcp/ip programming.with some time interval server has to send data.client has to close the connection and to open the connection between the time interval.this is the scenario when iam closing the connection in client side the connection terminates.how to... (1 Reply)
Discussion started by: sureshvaikuntam
1 Replies

7. Programming

Socket programming

Hello!:) I'm trying to do some socket programming based on the following situation: I have a directory service named Casino that will hold all the information regarding the gamers that will try to connect to it in order to play a game(for example (Blackjack).Once they make the login they are... (4 Replies)
Discussion started by: maracumbigo
4 Replies

8. Programming

Socket Programming

Hi , I'm facing the following problem in socket programming. My structure is struct { int i; char *str; }samp; I'm creating the pointer to this structure and assigning the value to the structure members and send via the socket to the another process. The receiver process when... (7 Replies)
Discussion started by: arunviswanath
7 Replies

9. Programming

Socket Programming socket

Hello, I actually try to make client-server program. I'm using SCO OpenServer Release 5.0.0 and when I try to compile my code (by TELNET) I've got this error : I'm just using this simple code : and I get the same error if I use : If someone can help me, Thanks (2 Replies)
Discussion started by: soshell
2 Replies

10. Programming

Socket programming

Suppose i am writing a C program which is going to use Socket calls. I want to use a Unix port for my Socket. How can i determine a port which is not already in use? (1 Reply)
Discussion started by: Nadeem Mistry
1 Replies
Login or Register to Ask a Question