Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Сетевой кодинг


Автор: [ss]3L33T@ 10.11.2003, 14:58
Вот тут подумал - а ведь я ничерта не знаю о сетевом кодинге.
ПРОШУ, КАК КОДЕР КОДЕРОВ:напишите plz простую прогу типа client-server.
Работать должна так:
1)Клиент пишет какую-то строку символов, по нажатию enter'а она отправляется серваку
2)Сервер принемает эту строку и выводит её на экран.
3)Всё должно быть в Console Application'е.

Прошу без умных слов, просто напишите прогу!

Автор: shedon 10.11.2003, 16:23
http://www.sources.ru/ - там всё есть!!!

Автор: RAN 10.11.2003, 22:51
Цитата
Прошу без умных слов, просто напишите прогу

smile.gif

Автор: knave 12.11.2003, 16:41
да уж, вот еще тут должно быть codeproject.com и codeguru.com

Автор: knave 12.11.2003, 16:54
Совет -
неужели нельзя сесть с книгой и поэксперементировать самому - пописать пограмки где испоолтзуются ту конструкции которые тебе непонятны, и исследовать их работу. Ты тут кучу таких вопросов задал, ответы на которые есть в любой книге по программированию.

Автор: r88t 14.11.2003, 00:13
Помогите пожалуйста!!!
Нужен исходник простой проги на C++ посылающий GET запрос на web сервер и выводящий ответ.
Типа на php это так выглядит:

$fp=fsockopen('localhost','80');
fputs ($fp, "GET / \r\n\r\n");
while (!feof($fp)) {
print fgets($fp);
}

fuckreal@list.ru

Автор: NiJazz 14.11.2003, 00:43
[ss]3L33T@, я тут делал такое...

Клиент:

Код

#include <stdio.h>
#include <windows.h>

#pragma comment (lib, "Kernel32.lib")

int main()
{
HANDLE    hPipe;
LPTSTR    pName = "\\\\.\\pipe\\mypipe";
INT     iInfoToSend;
DWORD    dwBytesWritten;
DWORD    dwMode = PIPE_READMODE_MESSAGE;
DWORD    dwBytesToSend = sizeof(INT);
char    yes_no;

try{

for (;;)
{
 hPipe = CreateFile(
    pName,
    GENERIC_READ |
    GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL);

 if (hPipe == INVALID_HANDLE_VALUE)
 {
  printf("Error while opening a pipe, ");
  //printf("%d\n", GetLastError());
  //return 0;
  throw 0;
 }

 if (!SetNamedPipeHandleState(
       hPipe,
       &dwMode,
       NULL,
       NULL))
 {
  printf("Error while setting state, ");
  //printf("%d\n", GetLastError());
  //break;
  throw 0;
 }

 printf("Enter integer value: ");
 scanf("%d", &iInfoToSend);

 if (!WriteFile (
    hPipe,
    &iInfoToSend,
    dwBytesToSend,
    &dwBytesWritten,
    NULL))
 {
  printf("Error while writing data, ");
  //printf("%d\n", GetLastError());
  //break;
  throw 0;
 }

 if (dwBytesWritten != dwBytesToSend)
 {
  printf("Data send size error\n");
  //break;
  throw 0;
 }

 if (!CloseHandle(hPipe))
 {
  printf("Error while closing handle: ");
  //printf("%d\n", GetLastError());
  //break;
 }

 printf("Close appliacation (Y/N)? ");
 scanf("%c", &yes_no);
 scanf("%c", &yes_no);
 if ((yes_no == 'Y') || (yes_no == 'y')) break;
}
} //try end

catch (...)
{
 printf("%d\n", GetLastError());  
}

if (hPipe != INVALID_HANDLE_VALUE) CloseHandle(hPipe);

return 0;
}


Сервер:

[CODE]

#include <stdio.h>
#include <windows.h>
#include <winbase.h>
#include <malloc.h>


int main()
{
HANDLE hPipe;
LPTSTR pName = "\\\\.\\pipe\\mypipe";
PINT piDigit = (PINT)malloc(sizeof(INT));
DWORD dwBytesForPipe = sizeof(INT);
DWORD dwBytesReadOut;
DWORD dwBytesToRead = sizeof(INT);
INT iSum = 0;

//////////////////////////////////////////////////////////////////////////
try {

hPipe = CreateNamedPipe(
pName,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE |
PIPE_READMODE_MESSAGE |
PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
dwBytesForPipe,
dwBytesForPipe,
NMPWAIT_USE_DEFAULT_WAIT,
NULL
);

if (hPipe == INVALID_HANDLE_VALUE)
{
printf("Error while creating a named pipe, ");
//printf("%d\n", GetLastError());
throw 0;
}

/*else printf("\nPipe's created\n\n");*/

for (;;)
{
if (!ConnectNamedPipe(
hPipe,
NULL))
{
printf("Error while connecting to a named pipe, ");
//printf("%d\n", GetLastError());
throw 0;
}

if (!ReadFile(
hPipe,
piDigit,
dwBytesToRead,
&dwBytesReadOut,
NULL ))
{
printf("Error while reading data, ");
//printf("%d\n", GetLastError());
throw 0;

}

if (dwBytesReadOut != dwBytesToRead)
{
printf("Data read size error\n");
throw 0;
}

if (!FlushFileBuffers(hPipe))
{
printf("Error while flushing buffers, ");
//printf("%d\n", GetLastError());
throw 0;
}

iSum = iSum + *piDigit;

printf("%d\n", iSum);

if (!DisconnectNamedPipe(hPipe))
{
printf("Error while disconnecting from a named pipe, ");
//printf("%d\n", GetLastError());
throw 0;
}

}//for(;;) end

}//try end

catch (...)
{
printf("%d\n", GetLastError());
}

// очистака памяти
for (int i = 0; i < NUM_OF_GROUPS; i ++)
{
if (SidList[i] != NULL)
FreeSid(SidList[i]);
SidList[i] = NULL;
}

free(piDigit);
piDigit = NULL;

if (pAcl != NULL)
{
LocalFree(pAcl);
pAcl = NULL;
}

CloseHandle(hPipe);

return 0;
}
[CODE]


Компилить под VC++ 6. Я правда ещё атрибуты безопасности делал к каналу, но сейчас убрал, чтобы не осложнять. А так там ещё было ограничение на группы юзеров...
Удачи! smile.gif

Автор: NiJazz 14.11.2003, 00:44
[ss]3L33T@, ни умных слов, ни комментариев... smile.gif)

Автор: NiJazz 14.11.2003, 00:50
Поправка к серверу:

Код


#include <stdio.h>
#include <windows.h>
#include <winbase.h>
#include <malloc.h>


int main()
{
HANDLE hPipe;
LPTSTR pName = "\\\\.\\pipe\\mypipe";
PINT piDigit = (PINT)malloc(sizeof(INT));
DWORD dwBytesForPipe = sizeof(INT);
DWORD dwBytesReadOut;
DWORD dwBytesToRead = sizeof(INT);
INT iSum = 0;

//////////////////////////////////////////////////////////////////////////
try {

hPipe = CreateNamedPipe(
pName,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE |
PIPE_READMODE_MESSAGE |
PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
dwBytesForPipe,
dwBytesForPipe,
NMPWAIT_USE_DEFAULT_WAIT,
NULL
);

if (hPipe == INVALID_HANDLE_VALUE)
{
printf("Error while creating a named pipe, ");
//printf("%d\n", GetLastError());
throw 0;
}

/*else printf("\nPipe's created\n\n");*/

for (;;)
{
if (!ConnectNamedPipe(
hPipe,
NULL))
{
printf("Error while connecting to a named pipe, ");
//printf("%d\n", GetLastError());
throw 0;
}

if (!ReadFile(
hPipe,
piDigit,
dwBytesToRead,
&dwBytesReadOut,
NULL ))
{
printf("Error while reading data, ");
//printf("%d\n", GetLastError());
throw 0;

}

if (dwBytesReadOut != dwBytesToRead)
{
printf("Data read size error\n");
throw 0;
}

if (!FlushFileBuffers(hPipe))
{
printf("Error while flushing buffers, ");
//printf("%d\n", GetLastError());
throw 0;
}

iSum = iSum + *piDigit;

printf("%d\n", iSum);

if (!DisconnectNamedPipe(hPipe))
{
printf("Error while disconnecting from a named pipe, ");
//printf("%d\n", GetLastError());
throw 0;
}

}//for(;;) end

}//try end

catch (...)
{
printf("%d\n", GetLastError());
}


free(piDigit);
piDigit = NULL;

CloseHandle(hPipe);

return 0;
}




Некоторые лишки убрал...

Автор: NiJazz 14.11.2003, 00:51
Если будут вопросы - задавай...

Автор: [ss]3L33T@ 14.11.2003, 17:27
2 NiJazz:
Пасибо.
Хоть кто-то.

Автор: NiJazz 16.2.2004, 12:29
Давно уж прошло. Просто наткнулся на то, что понизили рейтинг за нежелание продвигать эту тему.
Думаю, что разумно продолжить её. Кто первый? smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)