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!