Program na TCP/IP komunikaci - chyba MinGW linkeru

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Saphire
Začátečník
Začátečník
Uživatelský avatar
Registrován: 17. kvě 2009

Program na TCP/IP komunikaci - chyba MinGW linkeru

Příspěvek od Saphire »

Zdravím,
když kompiluju zdroják níže linker píše chybové hlášky "undefined reference" ke všem funkcím pro práci se síťovým spojením, přičemž funkci to uvede takto:

Kód: Vybrat vše

_NazevFunkce@cislo
.
Máte s tím někdo skušenost? Předem dekuji.
zdrojový kod:

Kód: Vybrat vše

#include <iostream>
#include <string>
#include <windows.h>

#define BUFSIZE 1000

using namespace std;

int main(int argc, char *argv[])
{
    WORD wVersionRequested = MAKEWORD(1,1); // Číslo verze
    WSADATA data;                           // Struktura s info. o knihovně
    string text;                            // Odesílaný a přijímaný text
    hostent *host;                          // Vzdálený počítač
    sockaddr_in serverSock;                 // Vzdálený "konec potrubí"
    int mySocket;                           // Soket
    int port;                               // Číslo portu
    char buf[BUFSIZE];                      // Přijímací buffer
    int size;                             // Počet přijatých a odeslaných bytů

    text="GET /bagr.txt host:localhost";

    // Připravíme sokety na práci
    if (WSAStartup(wVersionRequested, &data) != 0)
    {
        cout << "Nepodařilo se inicializovat sokety" << endl;
        // Podle všeho, zde se WSACleanup volat nemusí.
        return -1;
    }
    port = 80; // atoi("80"); 

    // Zjistíme info o vzdáleném počítači
    if ((host = gethostbyname("http://localhost")) == NULL)
    {
        cerr << "Špatná adresa" << endl;
        WSACleanup();
        return -1;
    }

    // Vytvoříme soket
    if ((mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
    {
        cerr << "Nelze vytvořit soket" << endl;
        WSACleanup();
        return -1;
    }

    // Zaplníme strukturu sockaddr_in
    // 1) Rodina protokolů
    serverSock.sin_family = AF_INET;
    // 2) Číslo portu, ke kterému se připojíme
    serverSock.sin_port = htons(port);
    // 3) Nastavení IP adresy, ke které se připojíme
    memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length);

    // Připojení roury
    if (connect(mySocket, (sockaddr *)&serverSock, sizeof(serverSock)) == -1)
    {
        cerr << "Nelze navázat spojení" << endl;
        WSACleanup();
        return -1;
    }

    // Odeslání dat
    if ((size = send(mySocket, text.c_str(), text.size() + 1, 0)) == -1)
    {
        cerr << "Problém s odesláním požadavku" << endl;
        WSACleanup();
        return -1;
    }
    cout << "Požadavek odeslán, " << size <<"b"<< endl;
    // Příjem dat
    text = "";
    while (((size = recv(mySocket, buf, BUFSIZE, 0)) != 0) && (size != -1))
    {
        cout << "Přijato " << size << endl;
        text += buf;
    }
    if (size == -1)
    {
        cout << "Nelze přijmout odpoved" << endl;
    }
    else
    {
        cout<< "Prijata odpoved:\n";
        cout<< text;
    }

    // Uzavřu spojení
    closesocket(mySocket);
    WSACleanup();
    cout << endl << text << endl;
    return 0;
}
[/size]
MB: Fujistu-Siemens D1961 CPU: Intel P4HT 521 2.8Ghz GPU: ATI Radeon 9600 Atlantis 128MB RAM: 2x1GB DDR400 ADATA PREMIER HDD: 2x 40GB Samsung SP0411c, 250GB WD Caviar D2500AAJB-00J3A0 OS: Windows XP/Linux Mndriva 2010.2
Airsoft archivements: Bloody BB, Amphibious operations, Calm under fire, Sugar rush, Dance, F**ker Dance!, Speedy Gonzales, 1 of 300
4res
Nováček
Nováček
Registrován: 07. kvě 2006

Re: Program na TCP/IP komunikaci - chyba MinGW linkeru

Příspěvek od 4res »

Zkus přilinkovat knihovnu ws2_32. Jednoduše přidej -lws2_32 jako parametr kompilátoru.

I tak se ale pro jistou zeptám. Chceš využívat WinSock nebo BSD sockets?
Odpovědět

Zpět na „Programování a web“