user1285727
user1285727

Reputation:

Winsock Programming

I have had nothing but trouble with Winsock since I started using it. I cannot seem to initialize Winsock to save my life. I'm not asking for anyone to write the whole program ( As I know how annoying that is ) I just need help with Winsock. I have tried several compilers and always get weird errors.

1>Compiling...
1>main.cpp
1>Linking...
1>main.obj : error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function _main
1>C:\Users\Rory\ProjectX\ProjectX\Debug\ProjectX.exe : fatal error LNK1120: 2 unresolved externals
1>Build log was saved at "file://c:\Users\Rory\ProjectX\ProjectX\ProjectX\Debug\BuildLog.htm"
1>ProjectX - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Here is my code:

#include <cstdlib>
#include <iostream>
#include <string.h>
#include <winsock2.h>

int iReqWinsockVer = 2;

using namespace std;

int main()
{
    cout<<"Initializing Winsock 2...\n";

    // WINSOCK INITIALIZATION

WSADATA wsaData;

if (WSAStartup(MAKEWORD(iReqWinsockVer,0), &wsaData)==0) {
    // Check if major version is at least iReqWinsockVer
    if (LOBYTE(wsaData.wVersion) >= iReqWinsockVer) {
        // Network stuff here
    }
    else {
        // Required version not available
    }

    // Cleanup winsock
    if (WSACleanup()!=0) {
        // cleanup failed
        }
    }
else {
    //  startup failed
}
    // END WINSOCK INITIALIZATION

        system("PAUSE");
    }

Upvotes: 7

Views: 4247

Answers (2)

Joatin
Joatin

Reputation: 106

Don't forget to define the WINDOWS_LEAN_AND_MEAN macro before including the windows header. Otherwise you will get tons of errors. That's because the windows header by default include the old winsock version. It contains lot of stuff that collides with the new winsock2 header. But by defining that macro the old winsock header is excluded.

Upvotes: 0

NullPoiиteя
NullPoiиteя

Reputation: 57322

Add ws2_32.lib as linker input.

Project Properties->linker->input page

On that page you will see Additional Dependencies. Put it in there - note that library names should be seperated with spaces Or you could add this line directly to your source file:

#pragma comment(lib, "ws2_32.lib") 

Upvotes: 21

Related Questions