WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Как закконектить клиент с сервером, если они на одном компе?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Как закконектить клиент с сервером, если они на одном компе?
bobo опубликован 18-08-2001 12:25 MSK   Click Here to See the Profile for bobo   Click Here to Email bobo  
Запускаю сначала сервер, всё ОК - ф-ия accept() выполняется и переводит систему в режим ожидания запросов... Затем запускаю клиент, но на ф-ии connect() облом!(ошибочный код возврата). При отладке обнаружил, что сервер и клиент создают сокеты с одним дескриптором. Может в этом причина? s=socket(AF_INET,SOCK_STREAM,0).
purpe опубликован 18-08-2001 12:34 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
а по какому адресу коннектится функция connect ?
bobo опубликован 18-08-2001 12:46 MSK     Click Here to See the Profile for bobo  Click Here to Email bobo     
вот участок кода:

i=socket(AF_INET,SOCK_STREAM,0);
memset((char*)&addr,'\0',sizeof(addr));

addr.sin_family=AF_INET;
addr.sin_port=htons(81);
addr.sin_addr.s_addr=INADDR_ANY;
bind(i,(struct sockaddr*)&addr,sizeof(addr));
gethostname(stroka,sizeof(stroka));
hp=gethostbyname(stroka);
server_addr.sin_family=AF_INET;
memset((char*)&server_addr.sin_addr,hp- >h_addr_list,hp->h_length);

server_addr.sin_port=htons(80);
if(connect(i,(struct sockaddr*)&server_addr,sizeof(server_addr))==SOCKET_ERROR)MessageBox(NULL,"Error in connect","Error",MB_OK);


Emerald опубликован 18-08-2001 14:09 MSK     Click Here to See the Profile for Emerald  Click Here to Email Emerald     
ДЛя сервера: после подключения клиента необходимо закрыть возможность подключений других клиентов функцией CLOSE. ТОгда всё работает.
bobo опубликован 18-08-2001 14:56 MSK     Click Here to See the Profile for bobo  Click Here to Email bobo     
так в том то и дело, что клиент не подключается. На сервере после accept() ни одна ф-ия не выполняется. Кроме того, и сервер и клиент имеют одинаковые дескрипторы сокетов - может в этом причина? Тогда как сделать, чтобы эти дескрипторы не совпадали?
m_fox опубликован 18-08-2001 17:57 MSK     Click Here to See the Profile for m_fox  Click Here to Email m_fox     
Пример. Клиент посылает данные, а сервер их отображает. У клиента в командной строке укажи IP.

#include "stdafx.h"
#include <winsock2.h>
#include <conio.h>

int InitSockets()
{
WORD wVersionRequested;
WSADATA wsaData;

wVersionRequested = MAKEWORD( 2, 0 );

if ( WSAStartup( wVersionRequested, &wsaData ) != 0 )
{
/* Tell the user that we couldn't find a usable */
/* WinSock DLL. */
return WSAGetLastError();
}


/* Confirm that the WinSock DLL supports 2.0.*/
/* Note that if the DLL supports versions greater */
/* than 2.0 in addition to 2.0, it will still return */
/* 2.0 in wVersion since that is the version we */
/* requested. */


if ( LOBYTE( wsaData.wVersion ) != 2

m_fox опубликован 18-08-2001 18:00 MSK     Click Here to See the Profile for m_fox  Click Here to Email m_fox     
Опа, обрезался.
Если нужно, то мылом.
bobo опубликован 18-08-2001 18:36 MSK     Click Here to See the Profile for bobo  Click Here to Email bobo     
Да, лучше мылом. Заранее благодарен.
vitalic опубликован 18-08-2001 20:33 MSK     Click Here to See the Profile for vitalic  Click Here to Email vitalic     
A cacoi cod oshibki vidaiot client?
bobo опубликован 18-08-2001 20:58 MSK     Click Here to See the Profile for bobo  Click Here to Email bobo     
что самое интересное, и WSAGetLastError() ни GetLastError() возвращают ноль! Как ещё можно протестировать код ошибки?
vitalic опубликован 19-08-2001 01:17 MSK     Click Here to See the Profile for vitalic  Click Here to Email vitalic     
Podji ti je v samom naciale scazal shto u tebia (ощибочный код возврата)?
vitalic опубликован 19-08-2001 01:23 MSK     Click Here to See the Profile for vitalic  Click Here to Email vitalic     
Raz proizoshla oshibca WSAGetLastError() doljna bila vidati tebe nomer oshibki.
A vobshe prishli mne ishaodniki servera i clienta na baciu@mail.ru ia tebe togda tocino scoju v ciom problema
bobo опубликован 19-08-2001 17:36 MSK     Click Here to See the Profile for bobo  Click Here to Email bobo     
Всё - нашёл ошибку, теперь всё работает. Надо было вместо memset((char*)&server_addr.sin_addr,hp- >h_addr_list,hp->h_length); писать memcpy((char*)&server_addr.sin_addr,hp->h_addr,hp->h_length);

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.