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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2012, 11:22   #1
Vika_-
Новичок
Джуниор
 
Регистрация: 20.01.2012
Сообщений: 1
По умолчанию Проблема с синхронизацией семафорами!

Я написала две программы. Одна клиент, другая сервер. Клиент отсылает серверу сообщение, тот принимает и отсылает его обратно! Нужно сделать синхронизацию семафорами.. У меня не как не выходит. Помогите пожалуйста =)
Вот мои коды:

Клиент
Код:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>

DWORD main(int argc, char *argv[])
{


HANDLE hNamedPipe;

DWORD cbWritten;

DWORD cbRead;

char szBuf[1024];
wchar_t namesem[256]=L"sema";
HANDLE sem = CreateSemaphore(NULL, 0, 1, namesem);

wchar_t szPipeName[256]=L"\\\\.\\pipe\\$MyPipe$";

printf("Named pipe client demo\n");

printf("Syntax: pipec [servername]\n");


hNamedPipe = CreateFile(
szPipeName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);

if(hNamedPipe == INVALID_HANDLE_VALUE)
{
fprintf(stdout,"CreateFile: Error %ld\n", 
GetLastError());
getch();
return 0;
}

fprintf(stdout,"\nConnected. Type 'exit' to terminate\n"); 


while(1)
{


printf("cmd>");

gets(szBuf);



if(!WriteFile(hNamedPipe, szBuf, strlen(szBuf) + 1,
&cbWritten, NULL))
break;

WaitForSingleObject(sem ,INFINITE);

if(ReadFile(hNamedPipe, szBuf, 1024, &cbRead, NULL))
printf("Received back: <%s>\n", szBuf);


else
{
fprintf(stdout,"ReadFile: Error %ld\n", 
GetLastError());
getch();
break;


}

if(!strcmp(szBuf, "exit"))
break;

}


CloseHandle(hNamedPipe);
return 0;
}


Сервер
Код:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main()
{

BOOL fConnected;


HANDLE hNamedPipe;


wchar_t lpszPipeName[256] = L"\\\\.\\pipe\\$MyPipe$";


char szBuf[1024];
wchar_t namesem[256]=L"sema";



DWORD cbRead;


DWORD cbWritten;
int pop;
HANDLE sem = OpenSemaphore(NULL, true, namesem);
printf("Named pipe server demo\n");


hNamedPipe = CreateNamedPipe(
lpszPipeName,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
512, 
512, 
5000,NULL
);


if(hNamedPipe == INVALID_HANDLE_VALUE)
{
fprintf(stdout,"CreateNamedPipe: Error %ld\n", 
GetLastError());
getch();
return 0;
}


fprintf(stdout,"Waiting for connect...\n"); 


fConnected = ConnectNamedPipe(hNamedPipe, NULL);


if(!fConnected)
{
switch(GetLastError())
{
case ERROR_NO_DATA:
fprintf(stdout,"ConnectNamedPipe: ERROR_NO_DATA");
getch();
CloseHandle(hNamedPipe);
return 0;
break;

case ERROR_PIPE_CONNECTED:
fprintf(stdout,
"ConnectNamedPipe: ERROR_PIPE_CONNECTED");
getch();
CloseHandle(hNamedPipe);
return 0;
break;

case ERROR_PIPE_LISTENING:
fprintf(stdout,
"ConnectNamedPipe: ERROR_PIPE_LISTENING");
getch();
CloseHandle(hNamedPipe);
return 0;
break;

case ERROR_CALL_NOT_IMPLEMENTED:
fprintf(stdout,
"ConnectNamedPipe: ERROR_CALL_NOT_IMPLEMENTED");
getch();
CloseHandle(hNamedPipe);
return 0;
break;

default:
fprintf(stdout,"ConnectNamedPipe: Error %ld\n", 
GetLastError());
getch();
CloseHandle(hNamedPipe);
return 0;
break;

}

CloseHandle(hNamedPipe);
getch();
return 0;
}


fprintf(stdout,"\nConnected. Waiting for command...\n"); 


while(1)
{

if(ReadFile(hNamedPipe, szBuf, 1024, &cbRead, NULL))
{ReleaseSemaphore(sem ,1, NULL);

if(!WriteFile(hNamedPipe, szBuf, strlen(szBuf) + 1,
&cbWritten, NULL))
break;


printf("Received: <%s>\n", szBuf);


if(!strcmp(szBuf, "exit"))
break;
}

}

CloseHandle(hNamedPipe);
return 0;
}


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.01.2012 в 14:01.
Vika_- вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логироване работы TIdTCPServer, проблема с синхронизацией Altera Работа с сетью в Delphi 0 05.09.2010 19:42
Организация работы с семафорами в UNIX Алекс...))) Помощь студентам 0 30.05.2010 12:34
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37