Befehl von Client zum Socket senden

Daniel Bräutigam

Grünschnabel
Hallo erst einmal, bin heute erst hier auf die Site gestoßen und habe gleich mal ein Problem für euch!

Gestern habe ich einen Server und einen Clienten mit der Socket-Programmierung erstellt.

In meinem Server habe ich eine Funktion implementiert, die den Rechner herunterfahren soll, wenn z.B. i == 1 ist.

Jetzt würde ich gerne vom Clienten den Wert i auf dem Server gleich 1 setzen!

Wie kann ich dies realisieren? Wie kann ich dem Server senden, dass i == 1 sein soll? Geht dies über die normale send()-Methode? Bisher habe ich nur gesehen, dass man da Texte mit übertragen kann.

Würde mich um eine sehr schnelle Antwort freuen (am besten mit Quelltext, bin Neuling), da dies eine Aufgabe für die Schule ist!
 
Wo ist das Problem?

Dann sende doch auch einfach Text. Und im Server implentierst du einfach eine Funktion die die empfangenden String bearbeitet. Wird heutzutage an vielen Stellen gemacht z.B. IRC.

Code:
/* client */
char buffer[] = "SET i=1";

write( s, buffer, strlen(buffer) );

Code:
/* server */
char buffer[1024];
char * ptr_buf;
size_t size;

size = read( s, buffer, 1024 );
buffer[size] = '\0';

if(!strncmp( "SET", buffer, 3 )) {
   ptr_buf = buffer + 4;
   if( *buffer == 'i' )
       buffer += 2;
   i = atoi( buffer );
}


CODE OHNE GEWÄHR! UNGETESTET!
 
Hi, leider verstehe ich den Code von dem Server nicht ganz! Kannst du ihn vielleicht erklären?

Anmerkung: Die rot markierte Zeile gibt folgenden Fehler zurück: "C:\Server\server.cpp(130) : error C2106: '+=' : Linker Operand muss ein L-Wert sein"!

Würde dies hier jetzt etwas bewirken? (bei mir tuts das noch nicht):


Code:
  // Befehl ausführen
	int i;
  
	char buffer[1024];
	char * ptr_buf;
	size_t size;

	size = recv( connectedSocket, buffer, 1024, NULL );
	buffer[size] = '\0';

	if(!strncmp( "SET", buffer, 3 )) 
	{
	ptr_buf = buffer + 4;
	if( *buffer == 'i' )
                     buffer += 2;
	i = atoi( buffer );
	}

	if (i == 1)
	{
		system("shutdown -s");
	};
 
Zuletzt bearbeitet:
Sorry!

Natürlich muss es
Code:
if( *ptr_buf == 'i' )
                     ptr_buf += 2;
	i = atoi( ptr_buf );
heißen!

Trotzdem ist der Code noch ungetestet, aber bei der Gelegenheit ist mir aufgefallen das du noch Zeiger in C lernen musst. Hau rein... ;)
 
Hi,

vielen vielen Dank für die Hilfe, es hat sogar endlich funktioniert.

Habe zwar Zeiger in der Schuler komplett gelernt und durchgekaut, aber es ist tatsächlich eines der Themen die ich in C bzw. jetzt C++ hasse, obwohl sie unabdingbar sind!

Also noch einmal vielen vielen lieben Dank!

Gruß Daniel!
 
Zurück