Sprawdzenie prostej apki klient-serwer pod linuxem

0

Czesc,
mam takie kody klienta i serwera jak ponizej. Kody te przepisalem z ksiazki i mniej-wiecej wiem o co chodzi. Natomiast nigdzie nie jest tam napisane jak to uruchomic i przetestowac :) Czy mozecie mi podpowiedziec jak przetestowac te kody?

Klient ma wysylac do serwera male litery, serwer ma to zamieniac na duze i odsylac do klienta.

Serwer:

/* proces serwera */
#include <signal.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SIZE sizeof(struct sockaddr_in)

void catcher(int sig);
int newsockfd;

int main()
{
	int sockfd;
	/* zainicjuj gniazdo internetowe z numerem portu 7000
	 * i adres lokalny, okreslany jako INADDR_ANY
	 */
	struct sockaddr_in server = (AF_INET, 7000, INADDR_ANY);
	static struct sigaction act;

	act.sa_handler = catcher;
	sigfillset(&(act.sa_mask));
	sigaction(SIGPIPE, &act, NULL);

	/* ustaw punkt koncowy transportu: */
	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
	{
		perror("socket call failed");
		exit(1);
	}

	/* zwiaz adres serwera z punktem koncowym */
	if (bind(sockfd, (struct sockaddr *)&server, SIZE) == -1)
	{
		perror("bind call failed");
		exit(1);
	}

	/* zacznij nasluchiwac przychodzacych polaczen */
	if (listen(sockfd, 5) == -1)
	{
		perror("listen call failed");
		exit(1);
	}

	char c;

	for( ; ; )
	{
		/* przyjmij polaczenie */
		if((newsockfd = accept(sockfd, NULL, NULL)) == -1)
		{
			perror("accept call failed");
			continue;
		}

		/* utworz proces potomny do pracy z polaczeniem */
		if (fork() == 0)
		{
			/* odbierz dane: */
			while (recv(newsockfd, &c, 1, 0) > 0)
			{
				/* zamien na wielkie litery i odeslij z powrotem: */
				c = toupper(c);
				send(newsockfd, &c, 1, 0);
			}
			/* gdy klient nie wysyla dluzej informacji gniazdo moze byc zamkniete
			 * i proces potomny zakonczony  */
			close(newsockfd);
			exit (0);
		}

		/* rodzic nie potrzebuje newsockfd: */
		close(newsockfd);
	}
}
void catcher (int sig)
{
	close(newsockfd);
	exit (0);
}

Klient:

/* proces klienta */

#include <ctype.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SIZE sizeof(struct sockaddr_in)

int main()
{
	int sockfd;
	char c, rc;
	struct sockaddr_in server = (AF_INET, 7000);

	/* przeksztalc i zapamietaj adres ip serwera */
	server.sin_addr.s_addr = inet_addr("197.45.10.2");

	/* ustaw punkt koncowy transportu: */
	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
	{
		perror("socket call failed");
		exit(1);
	}

	/* polacz gniazdo z adresem serwera: */
	if (connect(sockfd, (struct sockaddr *)&server, SIZE) == -1)
	{
		perror("connect call failed");
		exit(1);
	}

	/* wysylaj i odbieraj informacje od serwera: */
	for(rc = '\n'; ; )
	{
		if (rc == '\n')
			printf("Input a lower case character.\n");
		c = getchar();
		send(sockfd, &c, 1, 0);

		if (recv(sockfd, &rc, 1, 0) > 0)
			printf("%c", rc);
		else
		{
			printf("server has died.\n");
			close(sockfd);
			exit (1);
		}
	}
}

Dzieki za pomoc!

0

Tak jak napisałeś w temacie, na linuxie. Cygwin podejrzewam też się nada.

<offtop> Nie sądzisz kolego @bbxb że osoba zakładająca taki temat jak ten obecny, oraz taki jak ten http://4programmers.net/Forum/C_i_C++/238477-prosty_test_z_programowania_w_c_pod_linuxem?p=1061453#id1061453 nie powinien udzielać takich rad http://4programmers.net/Forum/Edukacja/246235-studia_informatyczne_-_warszawa?p=1107613#id1107613 w dziale edukacja? Udzielasz rad na temat studiowania i pracy dewelopera nie mając pojęcia ani o jednym ani o drugim, zachowaj odrobinę przyzwoitości.

ps. Tyle alt na forum a ja nadal nie mogę zapamiętać jak ładnie edytować linki :/
</offtop>

0

Jednak proszę tylko o merytoryczną pomoc na zadane pytanie :)
Za resztę bardzo dziękuję :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1