Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа сервера и клиента, проверка связи клиента и сервера 
:(
    Опции темы
UMmi
Дата 30.9.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 5.11.2006
Где: МО

Репутация: нет
Всего: 0



Здравствуйте. Используя данной статье требуется написать сервер и клиент. Помучившися, т.к. статья, кажется, с ошибками,  я сделал код сервера и клиента. Они оба компилируются... но это, сами понимаете, еще ничего не значит.
Правилен ли код клиента?

клиент
Код

//Подключаем библиотеку для роботи с windows (она включает в себя 
//Winsock2.h по этому явно подключать библиотеку WinSocket не 
//нужно) 
#include "windows.h"
#pragma comment(lib,"wsock32.lib")
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, 
int nCmdShow)
{
//инициализируем процесс библиотеки wsock32.dll
WSADATA WsaData;
int err = WSAStartup (0x0101, &WsaData);
if (err == SOCKET_ERROR)
{
return 1;
}
//теперь объявляем переменную типа SOCKET
int s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//задаем параметры для сокета (клиента)
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(3000);
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
//подключаемся к серверу
SOCKADDR_IN from;        
int fromlen=sizeof(from);        
int sclient = accept(s,(struct sockaddr*)&from, &fromlen);    
err = connect(s, (struct sockaddr *)&sin, sizeof(struct sockaddr));
char getchar [2];
getchar [1]='\0';
int end=0;
char t1[100];
char t2[500];
char * str=t1;
char * rezstr=t2;
strcpy(str,"");
strcpy(rezstr,"");
//передаем послание
strcpy(str,"Client OK..\n--END--\n");
send(sclient,str,strlen(str),0);
//вычитываем ответ от сервера(концом ответа являеться строка "--END--")
while ((end==0)&&(recv(s,getchar,sizeof(getchar[0]),0)!=SOCKET_ERROR))
{
if (getchar[0]=='\n')
{
if (strcmp(str,"--END--")==0)
{
    end=1;
}
else
{
strcat(str,"\n");
strncat(rezstr,str,strlen(str));
strcpy(str,"");
}
}
else
{
strcat(str,getchar);
}
}
//показываем ответ
MessageBox (NULL,rezstr,"",MB_OK);
//закрываем сокет
closesocket(s);
return 0;
}





Сервер

Код

//Подключаем библиотеку для роботы с windows (она включает в себя 
//Winsock2.h 
//по этому явно подключать библиотеку WinSocket не нужно) 
#include "windows.h"
#pragma comment(lib,"wsock32.lib")
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
//инициализируем процесс библиотеки wsock32.dll    
WSADATA WsaData;    
int err = WSAStartup (0x0101, &WsaData);    
if(err == SOCKET_ERROR)
{
    return 1;
}
//теперь объявляем переменную типа SOCKET
int s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
//задаем параметры для сокета (сервера)  
SOCKADDR_IN sin;    
sin.sin_family = AF_INET;    
sin.sin_port = htons(3000);    
sin.sin_addr.s_addr = INADDR_ANY;
//подключаем socket к коммуникационной среде    
err = bind( s, (LPSOCKADDR)&sin, sizeof(sin) );
//создаем очередь для ожидания вызовов от клиентов    
err = listen( s, SOMAXCONN);
//вечный цикл для многократного обслушивания запросов от клиентов    
while (1)
{
//принимаем запрос от программ-клиента на установление связи
SOCKADDR_IN from;        
int fromlen=sizeof(from);        
int sclient = accept(s,(struct sockaddr*)&from, &fromlen);
//вычитываем послание от клиента(концом послания являеться строка "-END-")        
char getchar [2];        
getchar [1]='\0';        
int end=0;        
char t1[100];        
char t2[500];        
char * str=t1;        
char * rezstr=t2;        
strcpy(str,"");        
strcpy(rezstr,"");        
while((end==0) && (recv(sclient,getchar,sizeof(getchar[0]),0)!=SOCKET_ERROR))
{
    if(getchar[0]=='\n')
    {
        if(strcmp(str,"--END--")==0)
        {
        end=1;
        }
        else 
        {
        strcat(str,"\n");
        strncat(rezstr,str,strlen(str));
        strcpy(str,"");
        }
    }
    else
    {
    strcat(str,getchar);
    }
}
MessageBox (NULL,rezstr,"",MB_OK);
//передаем ответ
strcpy(str,"Server OK.\n--END--\n");        
send(sclient,str,strlen(str),0);
//закрываем робочий сокет    
closesocket(sclient);
}
return 0;
}


PM   Вверх
ptr
Дата 1.10.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 9
Всего: 14



Ну вот почему большинство статей написано так,  что программа работает только в присутствии программиста smile . Я конечно понимаю что статья больше ознакомительная, но не да такой же степени. Вообщем поищи статью поприличнее smile .


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.