Новичок
Профиль
Группа: Участник
Сообщений: 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; }
|
|