Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [C] Sockets... (https://forum.scholieren.com/showthread.php?t=266314)

Talon 01-11-2002 19:28

[C] Sockets...
 
Ik wil een begin maken met sockets..
Heb een tutorial gedownload die niet echt uitgebreid is.. (n)
En daar staat een voorbeeld in, die normaal gesproken te compilen is..
Ik gebruik MS Visual C++ 4.0..

Als ik compile krijg ik deze output:

--------------------Configuration: socket1 - Win32 Debug--------------------
Linking...
whois.obj : error LNK2001: unresolved external symbol _WSACleanup@0
whois.obj : error LNK2001: unresolved external symbol _recv@16
whois.obj : error LNK2001: unresolved external symbol _send@16
whois.obj : error LNK2001: unresolved external symbol _connect@12
whois.obj : error LNK2001: unresolved external symbol _gethostbyname@4
whois.obj : error LNK2001: unresolved external symbol _htons@4
whois.obj : error LNK2001: unresolved external symbol _socket@12
whois.obj : error LNK2001: unresolved external symbol __WSAStartup
whois.obj : error LNK2001: unresolved external symbol _WSAGetLastError@0
Debug/socket1.exe : fatal error LNK1120: 9 unresolved externals
Error executing link.exe.
socket1.exe - 10 error(s), 0 warning(s)

Geen idee wat dit inhoud..

Iemand die me dit kan uitleggen ofzo?

Talon 01-11-2002 19:36

En uhm.. wat zijn de verschillen tussen socket.h en winsock.h?
In elke handleiding word er over de 1e gesproken.. terwijl ik alleen winsock.h heb..

Snap er niet echt veel van op deze manier.. :confused:

Lethalis 01-11-2002 21:10

Iets wat ik een half jaar geleden oid in elkaar flanste:

Code:

//
// Simpel research programma om winsock te beheersen
//
// Marc Schlechter
//
#include <iostream.h>
#include <winsock.h>

// Functiedefinitie met retourneerwaardes
const int WS_RET_GOOD      = 0;
const int WS_RET_BADFILE    = 1;
const int WS_RET_BADSOCKET  = 2;
const int WS_RET_FAILEDCONN = 3;
int WS_Get(
  char* HOSTIP,
  int  HOSTPORT,
  char* HOSTNAME,
  char* HOSTADDR,
  char *LOCALFILE );

// Standaard main
int main(int argc, char* argv[])
{
  cout << "Testing WS_Get... ";

  bool Result = WS_Get(
    "213.239.130.40",
    80,
    "forum.scholieren.com",
    "/cgi-bin/forumdisplay.cgi?action=topics&number=43",
    "dump.txt");

  cout << (Result == WS_RET_GOOD ? "OK" : "FAILED") << "\n";

  getchar();
  return 0;
}

//
// WS_Get: leest gegevens van een host en dumpt deze in een bestand
//
int WS_Get(
  char* HOSTIP,      // IP-Address van host
  int  HOSTPORT,    // Port te openen
  char* HOSTNAME,    // Hostnaam
  char* HOSTADDR,    // Relatief adres van document op host
  char* LOCALFILE )  // Lokaal bestand
{
  // Grootte van buffer
  const int RECVBUF = 1024;

  // Lokale werkdata
  WSADATA ws;
  int    d;
  char    buf[RECVBUF];
  struct  sockaddr_in a;
  SOCKET  s;
  int    ii;

  // Standaard retourneerwaarde
  int RET_CODE = WS_RET_GOOD;

  // Probeer bestand te openen
  FILE* MyF = fopen(LOCALFILE, "wt");
  if(MyF == NULL)
  {
    // Poging tot bestand openen mislukt
    return WS_RET_BADFILE;
  }
  else
  {
    // Winsock opstarten
    d = WSAStartup(0x101, &ws);
    s = socket(AF_INET,SOCK_STREAM, 0);
    if(s == INVALID_SOCKET)
    {
      // Probleem met aanmaken socket
      RET_CODE = WS_RET_BADSOCKET;
    }
    else
    {
      // Voorbereiden verbinding
      a.sin_family = AF_INET;
      a.sin_port = htons(HOSTPORT);
      a.sin_addr.s_addr = inet_addr(HOSTIP);

      // Probeer verbinding te maken met host
      d = connect(s, (struct sockaddr *)&a, sizeof(a));
      if(d == SOCKET_ERROR)
      {
        // Verbinding maken mislukt
        RET_CODE = WS_RET_FAILEDCONN;
      }
      else
      {
        // HTTP Request opbouwen
        sprintf(buf, "GET %s HTTP/1.0 \r\nHost: %s \r\n\r\n",
          HOSTADDR, HOSTNAME);

        // HTTP Request versturen naar host
        send(s, buf, sizeof(buf), 0);

        // Wachten op reactie en ontvangen gegevens wegschrijven
        ii = 1;
        while (ii != 0)
        {
          ii = recv(s, buf, RECVBUF, 0);
          buf[ii] = '\0';
          fwrite(buf, ii, 1, MyF);
        }
      }
    }
    // Lokaal bestand sluiten
    fclose(MyF);
  }

  return RET_CODE;
}

Misschien kun je er iets mee :)

Lethalis 01-11-2002 21:13

Trouwens: misschien moet jij bij VC++ winsock.lib toevoegen aan je project, zodat deze ingebonden wordt bij het linken. Anders krijg je idd unresolved externals.

*werkt zelf met BCB*

Talon 01-11-2002 21:15

hm ja dank je voor het voorbeeld..
alleen is dat c++..

maar goed..

ik zie erin staan:
d = WSAStartup(0x101, &ws);

weet je het verschil tussen:
WSAStartup() en _WSAStartup() toevallig?

wellicht dat het iets normaals is, maar ik kom het verder niet tegen..

Talon 01-11-2002 21:18

Citaat:

******** schreef:
Trouwens: misschien moet jij bij VC++ winsock.lib toevoegen aan je project, zodat deze ingebonden wordt bij het linken. Anders krijg je idd unresolved externals.

*werkt zelf met BCB*

hm.. uh.. ja.. dat is het.. :)
damn..
*schaam* :D

Lethalis 01-11-2002 21:43

Citaat:

Talon schreef:
hm ja dank je voor het voorbeeld..
alleen is dat c++..

Dan bouw je het om :p

Citaat:

ik zie erin staan:
d = WSAStartup(0x101, &ws);

weet je het verschil tussen:
WSAStartup() en _WSAStartup() toevallig?

Ik weet alleen maar dat het een macro is. Met name om te bepalen welke versie van het winsock protocol gebruikt wordt en voor initialisatie.

_WSAStartup() is het symbool ervan en geen echte functie afaik. Ik kom het tot nu toe alleen bij het linken tegen, nog nooit in code gezien :)

Chimera 01-11-2002 22:07

"unresolved externals" betekent over 't algemeen gewoon dat je een .lib niet meecompiled. Hoogstwaarschijnlijk staat in de tut ook wel welke libs je nodig hebt.

Lethalis 01-11-2002 22:22

Citaat:

Chimera schreef:
"unresolved externals" betekent over 't algemeen gewoon dat je een .lib niet meecompiled. Hoogstwaarschijnlijk staat in de tut ook wel welke libs je nodig hebt.
Een unresolved external is precies wat het is: een referentie naar een externe variabele of functie die de linker niet terug kan vinden. Dit wordt idd veroorzaakt door het weglaten van modules bij het linken. Niet alleen bij .libs, maar ook gewone .obj bestanden.


Alle tijden zijn GMT +1. Het is nu 22:52.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.