Клиент серверной программы на С под unix.

Гость18 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
26.12.2007

использовать не семейство протоколов AF_INET (hd = socket(AF_INET), а семейство PF[AF]_PACKET

Т.е. надо написать клиент который бы посылал пакеты по определенному сетевому интерфейсу.

Реализовать на c под unix.

Как пример, использование AF_INET

#include

#include

#include

#include

#include

#define SIZE sizeof (struct sockaddr_in);

void catcher (int sig);

int newsock;

main()

{int s; char c;

struct sockaddr_in server={AF_INET,7000,INADDR_A};

static struct sigaction act;

act sa_handler=catcher;

sigfillset (&(act sa_mask));

sigaction (SIGPIPE, &act, null);

/*созд сокета"/

if ((sockfd = socket (AF_INET, SOCK_STREAM,0))==-1)

{ perror ("Ошибка вызова сокета");

exit(1);

}

if (bind(sockfd,(struct sockadrr *)& server, SIZE)==-1)

{perror ("Ошибка вызова bind");

exit(1);

}

if (listen (sockfd,5)==-1)

{ perror ("Ошибка вызова listen");

exit(1);

}

for (ii)

{if(newsockfd=accept(sockfd,NULL,NULL)==-1)

{perror ("Ошибка вызова accept");

continue;

}

}

if(fork()==0)

{ while (recv(new_sockfd,&c,1,0)>0)

{c=toupper(c);

send (new_sockfd,&c,1,0)

close (new_sockfd);

exit(0);

}

close (new_sockfd);

exit(0);

}

}

}

void catcher( int sig)

{close (new_sockfd);

exit(0);

}

КЛИЕНТ

#include

#include

#include

#include

#define SIZE SIZEof (struct sock_addr_in)

main()

{

int sockfd; char c,vc;

struct sockaddr_in server = {AF_INET,7000};

server sin_addr s_addr = inet_addr("197.168.10.2");

if (sockfd=socket (AF_INET, SOCK_STREAM,0)==-1)

{ perror ("Ошибка вызова сокета");

exit(1);

}

if (connect (sockfd, (struct sockaddr *)&server, SIZE)==1)

{perror ("Ошибка вызова connect");

exit(1);

}

for (rc='/n';;)

{if (rc =='/n')

printf("Введите строчный символ\n");

c=getchar ();

send (sockfd,&c,1,0);

if(recv(sockfd,&c,1,0>0)

printf("%c",rc);

else

{

printf("Сервер не отвечает\n");

close(sockfd);

exit(1);

}}}

Заявки фрилансеров