2014-06-24 108 views
1
#pragma comment(lib,"Ws2_32.lib") 
#include<sdkddkver.h> 
#include<conio.h> 
#include<stdio.h> 
#include<iostream> 
#include<WinSock2.h> 
#include<windows.h> 
#define SCK_VERSION2 0x0202 

using namespace std; 

int main() 
{ 
    long SUCCESSFUL; 
    WSAData WinSockData; 
    WORD DLLVERSION; 

    DLLVERSION=MAKEWORD(2,1); 
    SUCCESSFUL=WSAStartup(DLLVERSION,&WinSockData); 
    SOCKADDR_IN ADDRESS; 
    int AddressSize=sizeof(ADDRESS); 

    SOCKET sock_LISTEN; 
    SOCKET sock_CONNECTION; 
    sock_CONNECTION=socket(AF_INET,SOCK_STREAM,NULL); 

    ADDRESS.sin_addr.s_addr=inet_addr("127.0.0.1"); 
    ADDRESS.sin_family=AF_INET; 
    ADDRESS.sin_port=htons(444); 

    sock_LISTEN=socket(AF_INET,SOCK_STREAM,NULL); 

    bind(sock_LISTEN,(SOCKADDR *)&ADDRESS,sizeof(ADDRESS)); 

    listen(sock_LISTEN,SOMAXCONN); 

    for(;;) 
    { 
     cout<<"\n\tSERVER:Waiting for incoming connection..."; 
     if(sock_CONNECTION=accept(sock_LISTEN,(SOCKADDR *)&ADDRESS,&AddressSize)); 
     { 
      cout<<"\n\tA connection was found!"<<endl; 
      SUCCESSFUL=send(sock_CONNECTION,"Welcome! You are now connected to the Server!",46,NULL); 
     } 
    } 
} 

每當我試圖建立服務器的代碼我得到以下錯誤:Socket編程C++錯誤未定義參考

enter image description here

我是全新的。我正在使用代碼塊。我一直在尋找最近4天的解決方案,但我不瞭解任何事情。請幫助

+0

你使用gcc編譯? – so61pi

+2

看起來像這個#pragma沒有工作。請注意,其MSVC特定的 –

+0

將庫添加到設置中的其他庫。另外,愚蠢的答案只是說你必須切換編譯器。這根本不是真的。我已經成功地將MinGW用於大部分API。 – chris

回答

1

如果您使用的是CodeBlocks,那麼您可以使用MinGW(根據低經驗級別)。

此功能適用於Visual Studio的編譯器:

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

使用MinGW這樣的#pragma將無法正常工作。

相反,如果你必須打開「項目」 - >「選項」,然後在左樹選擇你的項目(或者「調試」/「發佈」,如果你想讓更改工作在那裏),然後打開標籤「鏈接設置」。

按下「添加」,在MinGW/lib /目錄下找到類似「libws2_32.a」的庫名。

嘗試重建後。希望這會有所幫助。

+1

您添加的名稱應該是'ws2_32'。 'lib'和'.a'被照顧。 – chris

+0

不完全是這樣。對於「ws2_32」,他還必須在「MinGW \ lib」子選項卡「鏈接器」路徑中的「搜索目錄」選項卡中設置,然後才能使用「ws2_32」。 – Arkady

+0

我永遠不會想起要更改那裏的庫的默認搜索目錄。 – chris