Как использовать Winsock 2?

Как мне использовать Windows Sockets 2 в Visual Studio 2008. Я использую предварительно скомпилированные заголовки, пока что я пробовал:

  1. Включен winsock2.h в мой файл StdAfx.h
  2. и ввел WS2_32.LIB в качестве дополнительной зависимости в настройках проекта

Я получаю эти ошибки

------ Build started: Project: TestIVR, Configuration: Debug Win32 ------
Compiling...
main.cpp
c:\documents and settings\hussain\my documents\visual studio 2008\projects\testivr\testivr\main.cpp(30) : error C2065: 'WSAEVENT' : undeclared identifier
c:\documents and settings\hussain\my documents\visual studio 2008\projects\testivr\testivr\main.cpp(30) : error C2146: syntax error : missing ';' before identifier 'socketEvent'
c:\documents and settings\hussain\my documents\visual studio 2008\projects\testivr\testivr\main.cpp(30) : error C2065: 'socketEvent' : undeclared identifier
c:\documents and settings\hussain\my documents\visual studio 2008\projects\testivr\testivr\main.cpp(35) : error C2039: 'S_addr' : is not a member of 'in_addr'
        c:\program files\microsoft sdks\windows\v6.0a\include\inaddr.h(22) : see declaration of 'in_addr'
c:\documents and settings\hussain\my documents\visual studio 2008\projects\testivr\testivr\main.cpp(40) : error C2065: 'socketEvent' : undeclared identifier
c:\documents and settings\hussain\my documents\visual studio 2008\projects\testivr\testivr\main.cpp(40) : error C3861: 'WSAEventSelect': identifier not found
Build log was saved at "file://c:\Documents and Settings\Hussain\My Documents\Visual Studio 2008\Projects\TestIVR\TestIVR\Debug\BuildLog.htm"
TestIVR - 6 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Кстати, если я включу winsock2.h в свой main.cpp (где находится моя функция main ()), я получаю разные ошибки

------ Build started: Project: TestIVR, Configuration: Debug Win32 ------
Compiling...
main.cpp
c:\documents and settings\hussain\my documents\visual studio 2008\projects\testivr\testivr\main.cpp(36) : error C2039: 'S_addr' : is not a member of 'in_addr'
        c:\program files\microsoft sdks\windows\v6.0a\include\inaddr.h(22) : see declaration of 'in_addr'
Build log was saved at "file://c:\Documents and Settings\Hussain\My Documents\Visual Studio 2008\Projects\TestIVR\TestIVR\Debug\BuildLog.htm"
TestIVR - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Ниже приводится содержание моего файла заголовка StdAfx.h.

#pragma once

#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <winsock2.h>

person akif    schedule 24.08.2009    source источник
comment
решил, что сайт MSDN может оказаться полезным для справок в будущем.   -  person brice    schedule 29.06.2011


Ответы (4)


Вам нужно включить winsock2.h перед windows.h

person nos    schedule 24.08.2009

Ваша проблема с in_addr вызвана тем, что в in_addr НЕТ поля S_addr. Существует in_addr.s_addr, который перенаправляет на in_addr.S_un.S_addr.

person Goz    schedule 24.08.2009

По памяти я думаю, что windows.h включает winsock.h (т.е. сокеты v1), что конфликтует с winsock2.h. Вы можете предотвратить это, определив WIN32_LEAN_AND_MEAN:

#include <stdio.h>
#include <tchar.h>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
person jon-hanson    schedule 24.08.2009

Попробуйте поискать

http://www.sockets.com/ для примеров.

person sameer karjatkar    schedule 24.08.2009