Avatar billede cpjg Nybegynder
21. april 2002 - 14:59 Der er 1 løsning

Netværk i C++

Hvordan laver man et program i C++, hvor jeg kan installerer et netværkskort?
Og hvordan pinger man andre computere i C++?

Programmet skal laves til Linux.


Avatar billede tson Nybegynder
23. april 2002 - 22:24 #1
Jeg forstår ikke det første spørgsmål.

Til det andet spørgsmål: ping benytter ICMP protokollen. For at kunne snakke ICMP skal du åbne en raw socket med protokollen IPPROTO_ICMP. Nu har du noget at starte med.

Se i øvrigt man siderne (med kommandoen man):

man raw
man 7 icmp

Hvis du ikke har specielle krav til performance eller funktionalitet, vil det være væsentligt nemmere at bruge ping programmet, og simpelthen kalde det fra dit program. Helt simpelt:

############## BEGIN

#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <string>
#include <exception>

class SystemCommandFailedError : public std::exception {
public:
  SystemCommandFailedError(const std::string &msg)
    : _msg(msg)  {}

  virtual const char* what() const throw() {
    return _msg.c_str();
  }
private:
  const std::string _msg;
};

bool ping(const std::string& targetHost, int timeOut = 2, int packets = 2) {
  std::ostringstream os;
  os << "ping " << targetHost << " -w " << timeOut << " -c " << packets
    << " >/dev/null 2>&1";
  std::cout << os.str().c_str() << std::endl;
  int retval = system(os.str().c_str());
  if (retval == -1)
    throw SystemCommandFailedError("Failed to ping '"+targetHost+"'");
  return retval == 0;
}


void testPing(const std::string& targetHost) {
  if (ping(targetHost))
    std::cout << targetHost << " responded to ping" << std::endl;
  else
    std::cout << targetHost << " did not respond to ping" << std::endl;
}


int main() {
  testPing("localhost");
  testPing("169.0.0.5");
}
############## END


Held og lykke!

Thomas
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester