Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab8+.doc
Скачиваний:
22
Добавлен:
27.03.2015
Размер:
113.66 Кб
Скачать

Programma сервер

// Структура передаваемого сообщения

structmessage{

char text[30];

int length;

} ;

void errorp(char *s)

{

perror(s);

exit(1);

}

void sigorg(int sig)

{

printf("2:Stop server %d\n",getpid()) ;

exit(0) ;

}

int newsockfd;

int main()

{

int sockfd ;

struct sockaddr_in server;

struct message mess;

signal(1,sigorg) ;

// семейство адресов – домен, связь через сеть

server.sin_family=AF_INET ;

server.sin_port=8000 ; // номер порта

server.sin_addr.s_addr=INADDR_ANY ; // lokale IP adress pc

// create soket

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

errorp("2:Error socket") ;

// связывает сетевой адрес компьютера с идентификатором сокета

if (bind(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr_in))==-1)

errorp("2:Error bind") ;

// waitofklienta- включить прием соединений

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

errorp("2:Error listen") ;

while(1) {

// create dopolnitelnogo soketa

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

errorp("2:Error accept") ;

// child

if (fork()==0) {

// read message

if (recv(newsockfd,&mess,sizeof(struct message),0)>0) {

mess.text[mess.length]='\0'; // formir string of message

printf("2: Read '%s'\n", mess.text);

send(newsockfd, &mess, sizeof(struct message),0); // отправить сообщение

}

close(newsockfd) ;

}

exit(0);

}

exit (0);

return 0 ;

}

Programma Client

struct message {

char name[30] ;

int length ;

} ;

void errorp(char *s)

{

perror(s) ;

exit(1) ;

}

int main()

{

int sockfd, answ ;

char c, rc, string[20] ;

struct sockaddr_in server ;

struct message mess ;

// формируем сообщение – имя сервера и длину строки

strcpy(string, "server") ;

strcpy(mess.name,string) ;

mess.length=strlen(string);

// семейство адресов – домен, связь через сеть

server.sin_family=AF_INET ;

server.sin_port=7000 ; // номер порта

server.sin_addr.s_addr=inet_addr("127.0.0.1") ; // IP адрес

// создание сокета

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

errorp("Client: Error socket");

printf("Client: Create socket %d \n", sockfd) ;

// запрос на подключение к серверу

if (connect(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr_in))==-1)

errorp("Client:Server not found");

printf("Client: Server was found\n");

// send name to DNS server

send(sockfd, &mess, sizeof(struct message),0);

if (recv(sockfd,&mess,sizeof(struct message),0)>=0) { // message ot DNS

printf("Client: DNS Server answered\n");

if (mess.length != 0) {

printf("Client: server '%s' was found\n",string);

printf("Client: it's addres is %s\n",mess.name);

}

else

printf("Client: server '%s' not found!\n",string);

}

else

errorp("Client:Server cannot ask!");

printf("Client was ended\n") ;

exit(0);

return 0 ;

}

Тесты

Проверка правильности работы программы

$ ./ser & ./dns & ./cl

Client: Create socket 4

Client: Server was found

DNS: Server get a name of server server from client

DNS: server 'server' is found

DNS: IP=127.0.0.1

DNS: server '127.0.0.1' was found

DNS: Send message to 'server' IP=127.0.0.1

DNS: Connect with IP=127.0.0.1 ......

2: Read '127.0.0.1'

DNS: Message from 'server' IP=127.0.0.1

DNS: The end

Client: DNS Server answered

Client: server 'server' was found

Client: it's addres is 127.0.0.1

Client was ended

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]