WinSocket
Вот такая у меня проблема...
Инициализирую библиотеку сокетов вот так:
int init_winsock_dll=WSAStartup (MAKEWORD(2,0), &WSAData);
указываю версию DLL 2.0, проверяю на ошибку ничего не говорит о том что версия не та, поискал эту длл на винте нашёл версия и вправду 2.0, затем ставлю сокет в режим ожидания:
int listen_sock=listen(srv_socket,5);
Выдаёт ошибку, проверяю код ошибки функцией WSAGetLastError(),
Выдаёт вот этот код WSAEINVAL, я залез в MSDN и нашёл что это код, примерно это соответствует: Не правильно указа версия ДЛЛ, но как же не правильно ведь там чётко написано 2.0!!! Помогите пожалуйсто. Зарание благодарен.
А ты пробовал, ни о чем ни думая, ставить другие версии? Я всегда пишу WSAInit(MAKEWORD(2,2),&wd) и все работает.
Цитата:
Originally posted by lexa26
А ты пробовал, ни о чем ни думая, ставить другие версии? Я всегда пишу WSAInit(MAKEWORD(2,2),&wd) и все работает.
А ты пробовал, ни о чем ни думая, ставить другие версии? Я всегда пишу WSAInit(MAKEWORD(2,2),&wd) и все работает.
Да и в МСДН написано (2,2)
???
непонятно пишут
Цитата:
Originally posted by U$Bepb
Всем здравствуйте...
Вот такая у меня проблема...
Инициализирую библиотеку сокетов вот так:
int init_winsock_dll=WSAStartup (MAKEWORD(2,0), &WSAData);
указываю версию DLL 2.0, проверяю на ошибку ничего не говорит о том что версия не та, поискал эту длл на винте нашёл версия и вправду 2.0, затем ставлю сокет в режим ожидания:
int listen_sock=listen(srv_socket,5);
Выдаёт ошибку, проверяю код ошибки функцией WSAGetLastError(),
Выдаёт вот этот код WSAEINVAL, я залез в MSDN и нашёл что это код, примерно это соответствует: Не правильно указа версия ДЛЛ, но как же не правильно ведь там чётко написано 2.0!!! Помогите пожалуйсто. Зарание благодарен.
Всем здравствуйте...
Вот такая у меня проблема...
Инициализирую библиотеку сокетов вот так:
int init_winsock_dll=WSAStartup (MAKEWORD(2,0), &WSAData);
указываю версию DLL 2.0, проверяю на ошибку ничего не говорит о том что версия не та, поискал эту длл на винте нашёл версия и вправду 2.0, затем ставлю сокет в режим ожидания:
int listen_sock=listen(srv_socket,5);
Выдаёт ошибку, проверяю код ошибки функцией WSAGetLastError(),
Выдаёт вот этот код WSAEINVAL, я залез в MSDN и нашёл что это код, примерно это соответствует: Не правильно указа версия ДЛЛ, но как же не правильно ведь там чётко написано 2.0!!! Помогите пожалуйсто. Зарание благодарен.
10022 - WSAEINVAL
Недопустимый параметр. Указано недопустимое значение параметра, например, контрольного кода в функции WSAIoctl. Эта же ошибка может возникнуть из-за текущего состояния сокета, например, при вызове функций accept или WSAAccept на сокете, не находящемся в состоянии прослушивания.
А вообще укажи версию 2.2
почитатйте статью с примером, думаю станет понятней
Цитата:
Originally posted by Ramzes
Да и в МСДН написано (2,2)
???
непонятно пишут
Да и в МСДН написано (2,2)
???
непонятно пишут
Ну вообщетоя пробывал не только 2.2 и 2.0, а также всё что тольк оможно и 1.1 и 1.0 как написано в томже МСДН.
а ты код показать можешь ?
WSADATA WSAData;
int init_winsock_dll=WSAStartup(0x0202, &WSAData);
//Проверка правильности инициализаци интерфейса Winsock
if(init_winsock_dll!=0)
{
debug_sock_error();
return TRUE;
}
//Создание сокета, в переменную srv_socket помещён дескриптер сокета, он нужен для выполенения всех операций над сокетом
srv_socket=socket(AF_INET,SOCK_STREAM,0);
//В случае ошибки функция вернёт значение INVALID_SOCKET
if(srv_socket==INVALID_SOCKET)
{
debug_sock_error();
return TRUE;
}
//Перед использованием сокета мы должны задать его параметры в структуре sockaddr_in
sockaddr_in srv_sockaddr;
//Поле sin_family определяет тип адреса
srv_sockaddr.sin_family=AF_INET;
//Поле sin_port определяет номер порта, который будет использоваться для передачи данных
srv_sockaddr.sin_port=htons(27600);
//Разрешаем серверу рабоать с любыми адресами
srv_sockaddr.sin_addr.s_addr=INADDR_ANY;
//Привязываем адрес к сокету
int bind_socket=bind(srv_socket,(LPSOCKADDR)&srv_sockaddr,sizeof(srv_sockaddr));
if(srv_socket==SOCKET_ERROR)
{
debug_sock_error();
return TRUE;
}
//Переключаем сокет в режим ожидания
int listen_sock=listen(srv_socket,5);
if(listen_sock==SOCKET_ERROR)
{
MessageBox(NULL, "listen", "Error: WSAEACCES (10013)", MB_OK);
debug_sock_error();
return TRUE;
}
исходник работает нормально
исходник работает нормально
#include <winsock2.h>
void debug_sock_error ();
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow) {
WSADATA WSAData;
int init_winsock_dll=WSAStartup(0x0202, &WSAData);
if(init_winsock_dll!=0) {
debug_sock_error();
return TRUE;
}
SOCKET srv_socket=socket(AF_INET,SOCK_STREAM,0);
if(srv_socket==INVALID_SOCKET) {
debug_sock_error();
return TRUE;
}
struct sockaddr_in srv_sockaddr;
srv_sockaddr.sin_family=AF_INET;
srv_sockaddr.sin_port=htons(27600);
srv_sockaddr.sin_addr.s_addr=INADDR_ANY;
int bind_socket=bind(srv_socket, (LPSOCKADDR)&srv_sockaddr, sizeof(srv_sockaddr));
//!!!!!!!!!!!!!
if(srv_socket==SOCKET_ERROR) { //zdes srv_socket, a dolgen bit bind_socket
debug_sock_error();
return TRUE;
}
int listen_sock=listen(srv_socket,5);
if(listen_sock==SOCKET_ERROR) {
MessageBox(NULL, "listen", "Error: WSAEACCES (10013)", MB_OK);
debug_sock_error();
return TRUE;
}
Sleep (10000);
closesocket (srv_socket);
WSACleanup ();
return (0);
}
void debug_sock_error () {
MessageBox (NULL, "Socket error", "Error", MB_OK);
}
а так все работает.....