Hey udviklere,
Jeg har noget kode som jeg er blevet lidt forvirret på.
#include "Net.h"
#include "Exception.h"
#include "NetException.h"
#include "TimerException.h"
#include "IPAddress.h"
#include "Types.h"
#include "UDPSocket.h"
#include <cstdlib>
using namespace std;
void runServer(int argc, char ** argv)
{
//Default adresse at binde til
//NULL betyder alle
IPAddress * bindAddr = NULL;
//Default port at binde til
UInt16 port = 5555;
SInt32 i,bytesRead;
//Buffer til indkommende data
char buffer[1024];
//Så længe denne er true venter vi på data
bool again = true;
//Tjek om vi skal binde til et bestemt interface
if(bindAddr != NULL)
{
cout << "Binder til: " << bindAddr->getAddressString(0) << endl;
}
else
{
cout << "Binder til alle adresser" << endl;
}
cout << "Port: " << port << endl;
//Opret socket
UDPSocket * sock;
if(bindAddr == NULL)
{
sock = new UDPSocket(port);
}
else
{
sock = new UDPSocket(*bindAddr, port);
delete bindAddr;
bindAddr = NULL;
}
while(again)
{
cout << "Venter på data." << endl;
IPAddress * adr = NULL;
UInt16 port;
//Blokér til der er data
bytesRead = sock->read(buffer,1024,&adr,&port);
//Se hvem det er fra
cout << "Modtog data fra " << (string)(*adr) << endl;
string message(buffer,0,bytesRead);
if(message == string("CLOSEDOWN"))
{
again = false;
}
//Skriv dataene ud
cout << message << endl << endl;
//Send dataene tilbage:
sock->write(buffer,bytesRead,adr,port);
delete adr;
adr = NULL;
}
//Frigiv vores socket
delete sock;
}
void runClient(int argc, char ** argv)
{
//Adresse på server
IPAddress * serverAddr = NULL;
//Servers port
UInt16 port = 5555;
SInt32 i,bytesRead;
//Buffer til indkommende data
char buffer[1024];
//Besked som vi sender
char * message = NULL;
//Læs parametre
for(i = 1; i < argc; i++)
{
if(string(argv[ i ]) == string("-a"))
{
i++;
if(i == argc)
{
cout << "Parametren '-a' skal have et argument." << endl;
return;
}
if(serverAddr != NULL)
delete serverAddr;
string adr(argv[ i ]);
serverAddr = new IPAddress(adr);
}
else if(string(argv[ i ]) == string("-p"))
{
i++;
if(i == argc)
{
cout << "Parametren '-p' skal have et argument." << endl;
return;
}
port = atoi(argv[ i ]);
}
else
{
message = argv[ i ];
}
}
//Tjek om der blev specificeret en adresse
if(serverAddr == NULL)
{
cout << "Du har ikke skervet en adresse." << endl;
return;
}
//Tjeck om der blev specificeret en besked
if(message == NULL)
{
cout << "Du har ikke skrevet en besked." << endl;
return;
}
//Opret socket
UDPSocket sock;
try
{
sock.enableBroadcast(true);//Vi vil gerne kunne broadcaste
} catch (NetException & ne)
{
//Men hvis vi ikke kan så er det ok
}
sock.setTimeOut(5000);//Vi vil højst vente 5 sekunder på, at serveren svarer
//Send besked
sock.write(message,strlen(message),serverAddr,port);
delete serverAddr;
serverAddr = NULL;
try
{
bytesRead = sock.read(buffer,1024,&serverAddr,&port);
cout << "Modtog data fra " << (string)(*serverAddr) << endl;
cout.write(buffer,bytesRead);
cout << endl;
delete serverAddr;
serverAddr = NULL;
} catch (TimerException & te)
{
cout << "Vi fik intet i 5 sekunder." << endl;
}
}
int main(int argc, char ** argv)
{
if(argc == 1)
{
cout << "Brug: " << argv[0] << " <-l> -p port <-a address> <message>" << endl;
return 0;
}
try
{
//Initialisér netværk
netInit();
//Skal vi køre som server eller klient?
if(string(argv[1]) == string("-l"))
{
//Kør i server mode
runServer(argc, argv);
}
else
{
//Kør i client mode
runClient(argc, argv);
}
//Frigiv netværk
netRelease();
} catch (Exception & ex)
{
cout << ex << endl;
}
return 0;
}
men jeg skal ha' lavet et server program som kører i "skjul" altså i baggrunden og ikke skrive tekst til mig, men hvis den modtager strengen "CLOSEDOWN" fra klienten så skal den lukke ned.