Re[5]: Создание сервера
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 02.08.04 17:45
Оценка: 3 (1)
t>Но можно ли узнать, что же такое волшебное делает строка
wVersionRequested = MAKEWORD( 2, 2 );


#define MAKEWORD(a, b)      ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))


2 BYTE запихивает в один WORD
Любая задача имеет решение, даже когда решения не существует
Re[5]: Создание сервера
От: Michael Chelnokov Украина  
Дата: 02.08.04 18:25
Оценка: 3 (1)
Здравствуйте, t, Вы писали:

t>Спасибо!!! Все работает. Но можно ли узнать, что же такое волшебное делает строка

t>wVersionRequested = MAKEWORD( 2, 2 ); ? (Чтение MSDN не помогло). Не понятно, почему при наличии Вашего кода pr. работает...

В Windows (в отличии от UNIX) надо инициализировать библиотеку WinSock перед ее использованием. Так что всё "волшебство" — в вызове WSAStartup. А MAKEWORD(2,2) всего лишь формирует номер версии WinSock, которую хочет использовать программа. В данном случае это версия 2.2 (хотя для вызовов socket и bind достаточно и 1.1).
Re[3]: Создание сервера
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 02.08.04 15:34
Оценка: 2 (1)
Что я и говорил — не проинициализированная библиотека сокетов:


WORD wVersionRequested;
WSADATA wsaData;
int err;
 
wVersionRequested = MAKEWORD( 2, 2 );
 
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
    /* Tell the user that we could not find a usable */
    /* WinSock DLL.                                  */
    return;
}
 
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater    */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we      */
/* requested.                                        */
 
if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
    /* Tell the user that we could not find a usable */
    /* WinSock DLL.                                  */
    WSACleanup( );
    return; 
}
 
/* The WinSock DLL is acceptable. Proceed. */
Любая задача имеет решение, даже когда решения не существует
Re: Создание сервера
От: TarasCo  
Дата: 02.08.04 14:46
Оценка: 1 (1)
Здравствуйте, t, Вы писали:

t>Пишу что-то вроде эхо-сервера (Windows, VS6.0, Console). Проблема: функция bind() возвращает -1:



t>...

t> memset(&m_sockaddr_in, 0, sizeof(m_sockaddr_in));

t> m_sockaddr_in.sin_family = AF_INET;

t> m_sockaddr_in.sin_port = htons(iPort);
t> m_sockaddr_in.sin_addr.s_addr = INADDR_ANY;
t> m_hSocket = socket(AF_INET, SOCK_STREAM, 0);//IPPROTO_TCP);
t> int iRes;
t> iRes = bind(m_hSocket, (struct sockaddr*)&m_sockaddr_in, sizeof(m_sockaddr_in));
t>...

Проверте, чему у Вас равна переменная iPort. Возможно, она равна нулю или такой порт уже открыт. Более подробную информацию ою ошибке можно узнать с помощью WSAGetLastError.
Да пребудет с тобою сила
Re: Создание сервера
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 02.08.04 14:34
Оценка: -1
Здравствуйте, t, Вы писали:

t>Пишу что-то вроде эхо-сервера (Windows, VS6.0, Console). Проблема: функция bind() возвращает -1:



t>...

t> memset(&m_sockaddr_in, 0, sizeof(m_sockaddr_in));

t> m_sockaddr_in.sin_family = AF_INET;

t> m_sockaddr_in.sin_port = htons(iPort);
t> m_sockaddr_in.sin_addr.s_addr = INADDR_ANY;
t> m_hSocket = socket(AF_INET, SOCK_STREAM, 0);//IPPROTO_TCP);
t> int iRes;
t> iRes = bind(m_hSocket, (struct sockaddr*)&m_sockaddr_in, sizeof(m_sockaddr_in));
t>...

Укажи нормальный адрес, на котором этот порт будешь занимать. Адрес локального компа
Любая задача имеет решение, даже когда решения не существует
Создание сервера
От: t Россия  
Дата: 02.08.04 14:28
Оценка:
Пишу что-то вроде эхо-сервера (Windows, VS6.0, Console). Проблема: функция bind() возвращает -1:


...
memset(&m_sockaddr_in, 0, sizeof(m_sockaddr_in));

m_sockaddr_in.sin_family = AF_INET;
m_sockaddr_in.sin_port = htons(iPort);
m_sockaddr_in.sin_addr.s_addr = INADDR_ANY;
m_hSocket = socket(AF_INET, SOCK_STREAM, 0);//IPPROTO_TCP);
int iRes;
iRes = bind(m_hSocket, (struct sockaddr*)&m_sockaddr_in, sizeof(m_sockaddr_in));
...
Re[2]: Создание сервера
От: t Россия  
Дата: 02.08.04 15:16
Оценка:
Здравствуйте, Burd, Вы писали:

B>Здравствуйте, t, Вы писали:


t>>Пишу что-то вроде эхо-сервера (Windows, VS6.0, Console). Проблема: функция bind() возвращает -1:



t>>...

t>> memset(&m_sockaddr_in, 0, sizeof(m_sockaddr_in));

t>> m_sockaddr_in.sin_family = AF_INET;

t>> m_sockaddr_in.sin_port = htons(iPort);
t>> m_sockaddr_in.sin_addr.s_addr = INADDR_ANY;
t>> m_hSocket = socket(AF_INET, SOCK_STREAM, 0);//IPPROTO_TCP);
t>> int iRes;
t>> iRes = bind(m_hSocket, (struct sockaddr*)&m_sockaddr_in, sizeof(m_sockaddr_in));
t>>...

B>Укажи нормальный адрес, на котором этот порт будешь занимать. Адрес локального компа


Спасибо за совет. Но это уже пробовала — не помогает (пыталась указать в т.ч. и адрес локального хоста).
Re[3]: Создание сервера
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 02.08.04 15:24
Оценка:
Возможно, сокет не создан. Если так, тогда возможно не принициализированная библиотека сокетов.
Да, было бы нееплохо знать код ошибки
Любая задача имеет решение, даже когда решения не существует
Re[2]: Создание сервера
От: t Россия  
Дата: 02.08.04 15:30
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Здравствуйте, t, Вы писали:


t>>Пишу что-то вроде эхо-сервера (Windows, VS6.0, Console). Проблема: функция bind() возвращает -1:



t>>...

t>> memset(&m_sockaddr_in, 0, sizeof(m_sockaddr_in));

t>> m_sockaddr_in.sin_family = AF_INET;

t>> m_sockaddr_in.sin_port = htons(iPort);
t>> m_sockaddr_in.sin_addr.s_addr = INADDR_ANY;
t>> m_hSocket = socket(AF_INET, SOCK_STREAM, 0);//IPPROTO_TCP);
t>> int iRes;
t>> iRes = bind(m_hSocket, (struct sockaddr*)&m_sockaddr_in, sizeof(m_sockaddr_in));
t>>...

TC>Проверте, чему у Вас равна переменная iPort. Возможно, она равна нулю или такой порт уже открыт. Более подробную информацию ою ошибке можно узнать с помощью WSAGetLastError.


Здравствуйте, спасибо большое за совет. Но все-таки что-то у меня не работает: переменная iPort задана верная, а в результате WSAGetLastError получаю 10093. Что с этим делать?
Re[4]: Создание сервера
От: t Россия  
Дата: 02.08.04 16:22
Оценка:
Здравствуйте, Burd, Вы писали:

B>Что я и говорил — не проинициализированная библиотека сокетов:



B>
B>WORD wVersionRequested;
B>WSADATA wsaData;
B>int err;
 
B>wVersionRequested = MAKEWORD( 2, 2 );
 
B>err = WSAStartup( wVersionRequested, &wsaData );
B>if ( err != 0 ) {
B>    /* Tell the user that we could not find a usable */
B>    /* WinSock DLL.                                  */
B>    return;
B>}
 
B>/* Confirm that the WinSock DLL supports 2.2.*/
B>/* Note that if the DLL supports versions greater    */
B>/* than 2.2 in addition to 2.2, it will still return */
B>/* 2.2 in wVersion since that is the version we      */
B>/* requested.                                        */
 
B>if ( LOBYTE( wsaData.wVersion ) != 2 ||
B>        HIBYTE( wsaData.wVersion ) != 2 ) {
B>    /* Tell the user that we could not find a usable */
B>    /* WinSock DLL.                                  */
B>    WSACleanup( );
B>    return; 
B>}
 
B>/* The WinSock DLL is acceptable. Proceed. */


B>


Спасибо!!! Все работает. Но можно ли узнать, что же такое волшебное делает строка
wVersionRequested = MAKEWORD( 2, 2 ); ? (Чтение MSDN не помогло). Не понятно, почему при наличии Вашего кода pr. работает...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.