Sponsored Content
Full Discussion: Segmentation Fault
Homework and Emergencies Homework & Coursework Questions Segmentation Fault Post 302737861 by femchi on Thursday 29th of November 2012 10:54:45 PM
Old 11-29-2012
Segmentation Fault

this is a network programming code to run a rock paper scissors in a client and server.
I completed it and it was working without any error. After I added the findWinner function to the server code it starts giving me segmentation fault.

-the segmentation fault is fixed

Current problem -Also if I close server before the client I cannot connect to the server anymore.

Server part
Code:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <time.h>

void findWinner(int player,int pc)
{
	const char *items[3]={"Paper","Scissors","Rock"};
	printf("Client: %s\n",items[player-1]);
	printf ("Computer: %s\n",items[pc-1]);

	switch (player)
	{
		case 1:
			switch (pc)
			{
				case 1:
					printf("it is a DRAW\n");
					break;
				case 2:
					printf("Computer Wins\n");
					break;
				case 3:
					printf("Computer Loses\n");
					break;
				default:
					printf("ERROR\n");
					exit(0);
			};
			break;
		case 2:
			switch (pc)
			{
				case 1:
					printf("Computer Loses\n");
					break;
				case 2:
					printf("it is a DRAW\n");
					break;
				case 3:
					printf("Computer Wins\n");
					break;
				default:
					printf("ERROR\n");
					exit(0);
			};
			break;
		case 3:
			switch (pc)
			{
				case 1:
					printf("Computer Wins\n");
					break;
				case 2:
					printf("Computer Loses\n");
					break;
				case 3:
					printf("it is a draw\n");
					break;
				default:
					printf("ERROR\n");
					exit(0);
			};
			break;
		default:
			printf("ERROR\n");
			exit(0);
	}
}

///   SERVER   
 
int main(int argc, char *argv[])
{
    //Declaring process variables.
    int server_sockfd, client_sockfd;
    int server_len ; 
    int rc,pcChoice ; 
    unsigned client_len;
    struct sockaddr_in server_address;
    struct sockaddr_in client_address;
 
    //Remove any old socket and create an unnamed socket for the server.
    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
    server_address.sin_family = AF_INET;
    server_address.sin_addr.s_addr = htons(INADDR_ANY);
    server_address.sin_port = htons(7735) ; 
    server_len = sizeof(server_address);
 
    rc = bind(server_sockfd, (struct sockaddr *) &server_address, server_len);
     
    //Create a connection queue and wait for clients
    rc = listen(server_sockfd, 5);
    printf("waiting for client...\n") ; 
 
    client_len = sizeof(client_address);
    client_sockfd = accept(server_sockfd, (struct sockaddr *) &client_address, &client_len);
    printf("Client: ready\n") ;
    printf("Go\n"); 
 
    while(1)
    {
        int gameType;
        printf("Paper, Scissors, Rock game start.\n");

        rc = read(client_sockfd, &gameType, 1);       
	srand(time(NULL));
	pcChoice = (rand() % 3)+1;
	findWinner(gameType,pcChoice);
        gameType  = pcChoice;
        write(client_sockfd, &gameType, 1);

    }
 
    printf("server exiting\n");
 
    close(client_sockfd);
    return 0;
}


Client

Code:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
 
void showMenu()
{
	printf("\tyou can choose\n");
	printf("\t1 : Paper\n");
	printf("\t2 : Scissors\n");
	printf("\t3 : Rock\n");
	printf("\t4 : Exit\n");
}

void showHelp()
{
	printf("Paper beats rock (by covering it).\n");
	printf("Rock beats scissors (by blunting it).\n");
	printf("Scissors beats paper (by cutting it).\n");
	printf("Matching choices draw.\n");
	showMenu();
}

void findWinner(int player,int pc)
{
	 const char *items[3]={"Paper","Scissors","Rock"};
	printf ("The Other Player Choose %s , ",items[pc-1]);
	switch (player)
	{
		case 1:
			switch (pc)
			{
				case 1:
					printf("it is a DRAW\n");
					break;
				case 2:
					printf("you LOST\n");
					break;
				case 3:
					printf("you WON\n");
					break;
				default:
					printf("ERROR\n");
					exit(0);
			};
			break;
		case 2:
			switch (pc)
			{
				case 1:
					printf("you WON\n");
					break;
				case 2:
					printf("it is a DRAW\n");
					break;
				case 3:
					printf("you LOST\n");
					break;
				default:
					printf("ERROR\n");
					exit(0);
			};
			break;
		case 3:
			switch (pc)
			{
				case 1:
					printf("you LOST\n");
					break;
				case 2:
					printf("you WON\n");
					break;
				case 3:
					printf("it is a draw\n");
					break;
				default:
					printf("ERROR\n");
					exit(0);
			};
			break;
		default:
			printf("ERROR\n");
			exit(0);
	}
}

///   CLIENT   
 

int main(int argc, char *argv[])
{
    printf("Welcome to the Paper, Scissors and Rock game.\n");
    showMenu();
 
    int sockfd;
    int len, rc ;
    struct sockaddr_in address;
    int result;
    int itemType , tmp;
    
    char num[1];
 
   //Create socket for client.
    sockfd = socket(PF_INET, SOCK_STREAM, 0);
    if (sockfd == -1) { 
        perror("Socket create failed.\n") ; 
        return -1 ; 
    } 
     
    //Name the socket as agreed with server.
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = inet_addr("127.0.0.1");
    address.sin_port = htons(7735);
    len = sizeof(address);
 
    result = connect(sockfd, (struct sockaddr *)&address, len);
    if(result == -1)
    {
        perror("Error has occurred");
        exit(-1);
    }
 
	do
	{
		printf("\tEnter the option: ");
		scanf("%1s",num);		
		fflush(stdin);			
		if (isdigit(num[0]))
		{
			itemType= num[0] - '0';	
		}
		else
		{
			printf("Please Enter a number based on the options: \n");
			showHelp();
			continue;
		}
		if ((itemType <= 3) && (itemType > 0))
		{
			tmp=itemType;
			rc = write(sockfd, &itemType, 1);
			if (rc == -1) break ; 
			read(sockfd, &itemType, 1);
			findWinner(tmp,itemType);
		}
		else if(itemType == 4)
		{
			printf("The game is terminated.\n");
			exit(0);
		}
		 else
		{
			showHelp();
			continue;
		}

	}
    	while ( 1 ); 
    close(sockfd);
 
    exit(0);
}




Langara College / Hengameh Hamavand / Vancouver / Canada

Last edited by femchi; 11-30-2012 at 04:39 AM..
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Segmentation Fault

hello all, I tried a program on an array to intialise array elements from the standard input device.it is an integer array of 5 elements.but after entering the 4th element it throws a message called "Segmentation Fault" and returns to the command prompt without asking for the 5th element. ... (3 Replies)
Discussion started by: compbug
3 Replies

2. Programming

Hi! segmentation fault

I have written a program which takes a directory as command line arguments and displays all the dir and files in it. I don't know why I have a problem with the /etc directory.It displays all the directories and files untill it reaches a sub directory called peers which is in /etc/ppp/peers.the... (4 Replies)
Discussion started by: vijlak
4 Replies

3. Programming

segmentation fault

ive written my code in C for implementation of a simple lexical analyser using singly linked list hence am making use of dynamic allocation,but when run in linux it gives a segmentation fault is it cause of the malloc function that ive made use of????any suggestions as to what i could do??? thank... (8 Replies)
Discussion started by: rockgal
8 Replies

4. AIX

Segmentation fault

Hi , During execution a backup binary i get following error "Program error 11 (Segmentation fault), saving core file in '/usr/datatools" Riyaz (2 Replies)
Discussion started by: rshaikh
2 Replies

5. Programming

Why not a segmentation fault??

Hi, Why I don't receive a segmentation fault in the following sample. int main(void) { char buff; sprintf(buff,"Hello world"); printf("%s\n",buff); } If I define a buffer of 10 elements and I'm trying to put inside it twelve elements, Should I receive a sigsev... (22 Replies)
Discussion started by: lagigliaivan
22 Replies

6. UNIX for Dummies Questions & Answers

Segmentation Fault

Hi, While comparing primary key data of two tables thr bteq script I am getting this Error. This script is a shell script. *** Error: The following error was encountered on the output file. Script.sh: 3043492 Segmentation fault(coredump) Please let me know how to get through it. ... (5 Replies)
Discussion started by: monika
5 Replies

7. Programming

segmentation fault

Hi, I am having this segmentation fault not in the following program, bt. in my lab program . My lab program is horrible long so cannot post it here bt. I am using the following logic in my program which is giving the segmentation fault. Bt. if I run this sample program as it is it dosen't give... (3 Replies)
Discussion started by: mind@work
3 Replies

8. Programming

Using gdb, ignore beginning segmentation fault until reproduce environment segmentation fault

I use a binary name (ie polo) it gets some parameter , so for debugging normally i do this : i wrote script for watchdog my app (polo) and check every second if it's not running then start it , the problem is , if my app , remain in state of segmentation fault for a while (ie 15 ... (6 Replies)
Discussion started by: pooyair
6 Replies

9. Programming

Segmentation fault

I keep getting this fault on a lot of the codes I write, I'm not exactly sure why so I'd really appreciate it if someone could explain the idea to me. For example this code #include <stdio.h> main() { unsigned long a=0; unsigned long b=0; int z; { printf("Enter two... (2 Replies)
Discussion started by: sizzler786
2 Replies

10. Programming

C. To segmentation fault or not to segmentation fault, that is the question.

Oddities with gcc, 2.95.3 for the AMIGA and 4.2.1 for MY current OSX 10.14.1... I am creating a basic calculator for the AMIGA ADE *NIX emulator in C as it does not have one. Below are two very condensed snippets of which I have added the results inside the each code section. IMPORTANT!... (11 Replies)
Discussion started by: wisecracker
11 Replies
All times are GMT -4. The time now is 09:06 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy