Daten senden über WinSock?

randomize

Erfahrenes Mitglied
Hallo,

kann man mit Sockets irgendwie einfach nur Daten senden? Ideal wäre natürlich sowas a la fread/fwrite, sozusagen
Code:
SOCKET s;
struct
{ int i; double d; } data;
data.i = 5;
data.d = 123.456;
[.........]
senddata (&data, sizeof (data), 1, s);

So in der Art halt. Gibt es da so was? Ich will mich halt irgendwie um die ganze dämliche Stringbearbeitung drücken... :-) Die hasse ich leider ganz enorm.
Oder wie kann man ansonsten Variablen in einen char buffer packen?

TIA, bye
randomize
 
String-Behandlung wird wohl das einfachste sein, was man beim proggen anwenden kann, aber egal.
Ich hab Dir mal meine Vorgehensweise unter Linux zusammengebaut. (ohne extra-Funktionen damit der Ablauf eindeutig erkennbar ist)
Ist natürlich ANSI C und bis auf einige DatenTypen Plattformunabhängig.

Wenn Dir die Grundlagen allzu schwerfallen sollten, versuch mal die Klassenbibliotheken von Microsoft oder von Borland, die sind handlicher, dafür nicht unter Linux lauffähig und natürlich C++.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define BUFFER_SIZE 1024
#define TARGET_HOST 66.12.25.130
#define TARGET_PORT 9876

int main(int argc, char *argv[])
{
	int iSocket;
	struct sockaddr_in srv;

	char cBuffer[BUFFER_SIZE];
	int iBytes;

	iSocket = socket(AF_INET, SOCK_STREAM, 0);

	if (iSocket == -1){
		perror("fehler beim socket anlegen");
		return -2;
	}
	
	srv.sin_addr.s_addr = inet_addr(TARGET_HOST);
	srv.sin_port = htons( (unsigned short int) atoi(TARGET_PORT));
	srv.sin_family = AF_INET;
	
	if (connect(iSocket, &srv, sizeof(srv)) == -1){
		perror("fehler beim connect");
		return -3;
	}

	//HIERMIT DATEN EMPFANGEN
	iBytes = recv(iSocket, cBuffer, sizeof(cBuffer) - 1, 0);
	if (iBytes == -1){
		fprintf(stderr, "%s: Fehler beim empfangen\n", argv[0]);
		return -4;
	}
	printf("%s", cBuffer);

	//HIERMIT DATEN SENDEN
	strcpy(cBuffer, "TEST-SOCKET mit TEST-ANFRAGE");
	iBytes = send(iSocket, cBuffer, strlen(cBuffer), 0);

	if (iBytes == -1){
		fprintf(stderr, "%s: Fehler beim senden\n", argv[0]);
		return -5;
	}
		
	cBuffer[iBytes] = '\0';
	
	close(iSocket);
	
	return 0;
}
 
Ja gut sowas hatte ich auch, auch eben mit entsprechenden Funktionen in Strings konvertierte Variablen etc etc gesendet, aber ich dacht halt nur, ob es vielleicht etwas gäbe um z. B. ganze structs zu schicken, ohne alles einzeln konvertieren zu müssen. :rolleyes: Mehr interessehalber.

Danke trotzdem! :-)
randomize
 
Zurück