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


Автор: Kirgston 13.10.2009, 13:23
Всем доброго времени суток! Вопросик вот в чем...

Код

//---------------------------------------------------------------------------
#include <windows.h>
#include <iostream.h>
#include <winsock2.h>

SOCKADDR_IN socketaddr;
SOCKET sock;
void SocketConnect();
void SocketCreate();
void SocketInitialize();
void SocketGetHostName();
void SocketClean();
void SocketClose();
void SocketBind();
//---------------------------------------------------------------------------
void main()
{
   SocketInitialize();
   SocketGetHostName();
   SocketCreate();
   SocketBind();
   SocketConnect();
   SocketClose();
   SocketClean();
   system("pause");
}
//---------------------------------------------------------------------------
void SocketInitialize()
{
   WSADATA wsaData;
   if (WSAStartup(MAKEWORD(2,2),&wsaData))
   {
       cout<<"Can`t initialize socket!\n";
   }
   else
   {
       cout<<"Socket initialized!\n";
   }
}
//---------------------------------------------------------------------------
void SocketGetHostName()
{
   char info[64]={0};
   if (gethostname(info,sizeof(info)) )

        cout<<"Can`t get Host Name!\n";
   else
        cout<<"Host Name: "<<info<<"\n";

}
//---------------------------------------------------------------------------
void SocketClean()
{
   if (WSACleanup())
        printf("Can`t clean Socket!\n");
   else
        printf("Socked cleaned!\n");

}
//---------------------------------------------------------------------------
void SocketCreate()
{
   sock=socket(AF_INET,SOCK_STREAM,NULL);
   if (sock==INVALID_SOCKET) {
        cout<<"Can`t create socket!\n";
   }
   else
   {
        cout<<"Socket created!!!\n";
   }
}
//---------------------------------------------------------------------------
void SocketClose()
{
   closesocket(sock);
}
//---------------------------------------------------------------------------
void SocketBind()
{

socketaddr.sin_family = AF_INET;
socketaddr.sin_addr.s_addr  = INADDR_ANY;
socketaddr.sin_port = htons(80);

if (bind(sock,(LPSOCKADDR)&socketaddr,sizeof(socketaddr)) == SOCKET_ERROR)
{
    printf("Error bind socket");
}
else
{
printf("Socket binded!\n");
}

}
//---------------------------------------------------------------------------
void SocketConnect()
{
    if (connect(sock,(sockaddr *)&socketaddr,sizeof(socketaddr) )==SOCKET_ERROR ) {
        cout<<"Can`t connect to socket!\n";
    }
    else
    {
        cout<<"Connect to socket established\n";
    }
}


Вроде всё правильно сделал но постоянно пишет Can`t connect to socket!. Что у меня не так?

Автор: xvr 13.10.2009, 14:12
Цитата

Вроде всё правильно сделал но постоянно пишет Can`t connect to socket!. Что у меня не так? 


Цитата

Код

socketaddr.sin_family = AF_INET;
socketaddr.sin_addr.s_addr  = INADDR_ANY;
socketaddr.sin_port = htons(80);

....

    if (connect(sock,(sockaddr *)&socketaddr,sizeof(socketaddr) )==SOCKET_ERROR ) {

Это надо понимать как 'приконнектите меня куда нибудь!'  smile 
В socketaddr.sin_addr.s_addr должен быть IP реального хоста, куда надо коннектится
(Для локального хоста надо подать 127.0.0.1)

PS. bind для клиента необязателен

Автор: GremlinProg 13.10.2009, 15:48
по сокетам всегда можно посмотреть готовые

клиент: http://msdn.microsoft.com/en-us/library/ms737591(VS.85).aspx
сервер: http://msdn.microsoft.com/en-us/library/ms737593(VS.85).aspx

и найти в них различия, чтобы не делать ошибок

клиент уже по-определению должен коннектиться к серверу

Автор: Kirgston 13.10.2009, 15:59
Цитата(xvr @  13.10.2009,  14:12 Найти цитируемый пост)
Это надо понимать как 'приконнектите меня куда нибудь!'   

Да да мне хоть кудато  smile 
Просто читал щас First Steps о сокетах вот там такое и было ))))) . А сам не мог понять что к чему т.к. бинд проходил удачно а уже на конекте падало...

хе хе спасибо большое! smile

Добавлено через 56 секунд
Цитата(GremlinProg @  13.10.2009,  15:48 Найти цитируемый пост)
по сокетам всегда можно посмотреть готовыеклиент: http://msdn.microsoft.com/en-us/library/ms737591(VS.85).aspxсервер: http://msdn.microsoft.com/en-us/library/ms737593(VS.85).aspxи найти в них различия, чтобы не делать ошибокклиент уже по-определению должен коннектиться к серверу

И вам благодарен!  smile 

Автор: DrHex 15.10.2009, 18:16
Читай МСДН Kirgston или кто там по сокетам стреляет ну он еще по никсы...... Забыл.. Капец какой то.

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