Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2011, 21:31   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
Сообщение TCP/IP параллельной обработки запросов

Здаравствуйте, у меня такое задание:
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Реализовать параллельное соединение с использованием отдельного процесса для обработки каждого запроса. На сервере хранится список книг, хранящихся в библиотеке. Каждая запись списка содержит следующую информацию о книгах
- регистрационный номер книги,
- автор;
- год издания;
- издательство;
- количество страниц.
Таких записей должно быть не менее 5.
Клиент посылает на сервер фамилию интересующего его автора. Назад он получает список книг указанного автора.

В общем, вроде почти все организовано.
Проблема: Как можно в buf на посылку клиенту закинуть и год издания, и номер книги , и издательство, и кол-во страниц.

Т.е. результат работы хотелось бы такой:
Отправляю серверу фамилию, например, "Ivanov" и получаю Ivanov Ivan Ivanovich 2 2010 20 10


Клиент:

Код:
int main(){
	struct sockaddr_in peer;
	int s,t,t1;
	int rc;
	char buf[256],p,p1,b[256];;

	peer.sin_family=AF_INET;
	peer.sin_port=htons(7500);
	peer.sin_addr.s_addr=inet_addr("127.0.0.1");

	s=socket(AF_INET,SOCK_STREAM,0);
	rc=connect(s,(struct sockaddr *)&peer,sizeof(peer));
int true=1;
while(true){
	//Выбор пункта меню и отправка его серверу			
	puts("Choose:");
	puts("\t1 - Select");
	puts("\t3 - View");
	puts("\t4 - Exit");
	scanf("%s",buf);
	buf[1]='\0';
	send(s,buf,sizeof(buf),0);
	p=buf[0];

	switch (p){
	case '1'://Выбрать
		puts("fio:");scanf("%s",buf);
		send(s,buf,sizeof(buf),0);

		printf("result: ");
		recv(s,buf,sizeof(buf),0);
printf("%s",buf);
		
		printf("\n");
		break;
	
	case '3'://Просмотреть 5 записей
		recv(s,buf,sizeof(buf),0);printf("%s",buf);
		recv(s,buf,sizeof(buf),0);printf("%s",buf);
		recv(s,buf,sizeof(buf),0);printf("%s",buf);
		recv(s,buf,sizeof(buf),0);printf("%s",buf);
		recv(s,buf,sizeof(buf),0);printf("%s",buf);

		break;	
	case '4'://Выход
		exit(0);
	
			
	}
}
}
Сервер:

Код:
struct Employee{
	char name[35];
	char number[10];
	char year[10];
	char publishing[10];
         char pages[10];
} em[5];

// процедура для обслуживания соединения
int Func(int newS){

	long int i,num,t, mon, doh, nal;
	float sum;
	int m,true=1;
	char p,p1,s;
	char buf[256],b[256];
	while (true){
		

		recv(newS,buf,sizeof(buf),0);

recv(newS,buf,sizeof(buf),0);
printf("%s",buf);


send(newS,buf,sizeof(buf),0);

break;
}
}

void reaper(int sig){
	int status;
	while (wait3(&status,WNOHANG,(struct rusage*)0)>=0);
}

int main(){
		strcpy(em[1].name,"Sergeev Sergei Sergeevich");
		strcpy(em[1].number,"1");
		strcpy(em[1].year,"2009");
		strcpy(em[1].publishing,"10");
                    strcpy(em[1].pages,"10");	
		
		strcpy(em[2].name,"Ivanov Ivan Ivanovich");
		strcpy(em[2].number,"2");
		strcpy(em[2].year,"2010");
		strcpy(em[2].publishing,"20");
                    strcpy(em[2].pages,"10");	
		
		strcpy(em[3].name,"Vladimirov Vladimir Vladimirovich");
		strcpy(em[3].number,"3");
		strcpy(em[3].year,"2011");
		strcpy(em[3].publishing,"30");	
                    strcpy(em[3].pages,"10");
	
		
		strcpy(em[4].name,"Sidorov Sidor Sidorovich ");
		strcpy(em[4].number,"4");
		strcpy(em[4].year,"2012");
		strcpy(em[4].publishing,"40");	
                    strcpy(em[4].pages,"10");
		
		strcpy(em[5].name,"Vasilev Vasilii Vasilievich");
		strcpy(em[5].number,"5");
		strcpy(em[5].year,"2013");
		strcpy(em[5].publishing,"50");
                    strcpy(em[5].pages,"10");
	
		
	
		struct sockaddr_in local;
		int s,
		    newS,
		    rc;
	
		
		local.sin_family=AF_INET;
		local.sin_port=htons(7500);
		local.sin_addr.s_addr=htonl(INADDR_ANY);
		
		s=socket(AF_INET, SOCK_STREAM,0);
		rc=bind(s,(struct sockaddr *)&local, sizeof(local));
		rc=listen(s,5);
		(void)signal(SIGCHLD,reaper);
		int true =1;
		while(true){
			newS=accept(s,NULL,NULL);
			switch (fork()){
			case 0:
				(void)close(s);
				exit(Func(newS));
			default:
				(void)close(newS);
		        }
		
		
		}
		
		
		
		return 0;
}
zhenya.ya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с параллельной работой клиентов IceExecutioner SQL, базы данных 6 17.11.2010 16:49
как создать TCP клиент, TCP сервер ? DreamMaster911 C/C++ Сетевое программирование 1 26.10.2010 15:05
TCP/IP Syltan Свободное общение 14 11.10.2009 19:18
"2540:TCP"= 2540:TCP:oeiuq AlexSh Безопасность, Шифрование 0 06.07.2009 10:28
TCP/IP TaTT DoGG Общие вопросы .NET 12 18.04.2009 23:02