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.
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