Hallo =)
ich möchte ein TCP-Socket programmieren (mit Red Hat Enterprise).
Es sollte möglichst einfach und verständlich sein.
Habe schon im WWW sämtliche Seiten durchforstet, allerdings gibt es relativ wenige gute Erklärungen.
Weiß vllt jemand eine gute Seite, wo man leicht verständlich Socket-Tutorials durchlesen kann?
ich habe es auch schon selbst versucht. Es wird auch alles gemacht, das Socket wird erstellt, gebunden, der Client kann darauf zugreifen nur wird die Nachricht nicht gesant.
Hier der Quelltext:
Client:
Server:
ich möchte ein TCP-Socket programmieren (mit Red Hat Enterprise).
Es sollte möglichst einfach und verständlich sein.
Habe schon im WWW sämtliche Seiten durchforstet, allerdings gibt es relativ wenige gute Erklärungen.
Weiß vllt jemand eine gute Seite, wo man leicht verständlich Socket-Tutorials durchlesen kann?
ich habe es auch schon selbst versucht. Es wird auch alles gemacht, das Socket wird erstellt, gebunden, der Client kann darauf zugreifen nur wird die Nachricht nicht gesant.
Hier der Quelltext:
Client:
Code:
#include <sys/types.h>
#include <sys/socket.h>
#define SERVER_PORT 52000
#define BUF 1024
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
main()
{
int sock=0, cn=0, size=0;
struct sockaddr_in address;
//char buffer[BUF];
char buffer[] = "Hello World";
// char *buffer = malloc (BUF);
/*Socket anlegen*/
printf("\nClient Socket gestartet\n");
sock=socket(AF_INET, SOCK_STREAM, 0);
if (sock==-1)
printf("Socket Anlegen fehlgeschlagen\n");
else
printf("Socket angelegt\n");
/*Connect*/
/*Zieladresse festlegen*/
address.sin_addr.s_addr = inet_addr("127.0.0.1"); //IP- addr.sin_addr.s_addr
address.sin_family = AF_INET; //Internet oder Lokal? Adressfamily
address.sin_port = htons (SERVER_PORT); //Port
/*"Connect"*/
cn=connect(sock, (struct sockaddr*) &address, sizeof(address));
if (cn==-1)
printf("Verbinden fehlgeschlagen\n");
else
printf("Verbindung hergestellt - verbunden mit Server\n");
/*Send*/
//printf("Bitte Nachricht zum Versenden eingeben:\n");
//gets(buffer);
//fgets(buffer, BUF, stdin);
size = send(sock, buffer, strlen(buffer), 0);
if (cn==-1)
printf("Senden felgeschlagen");
else
printf("Nachricht gesendet");
/*close(sock);
return EXIT_SUCCESS;*/
}
Server:
Code:
#include <sys/types.h>
#include <sys/socket.h>
#define SERVER_PORT 52000
#define BUF 1024
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
main()
{
int sock=0, bnd=0, lsn=0, acc=0, size=0;
struct sockaddr_in address;
char buffer[BUF]; //malloc?
//char *buffer = malloc (BUF);
int address_size;
/*Socket anlegen*/
printf("\nServer Socket gestartet\n");
sock=socket(AF_INET, SOCK_STREAM, 0);
if (sock==-1)
printf("Socket Anlegen fehlgeschlagen\n");
else
printf("Socket angelegt\n");
/*Binden*/
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY; //Von überall erreichbar
address.sin_port = htons (SERVER_PORT);
bnd=bind(sock, (struct sockaddr*) &address,sizeof (address));
if (bnd==-1)
printf("Binden fehlgeschlagen\n");
else
printf("Binden erfolgreich\n");
/*Listen*/
lsn=listen(sock, 5);
if (lsn==-1)
printf("Listen fehlgeschlagen\n");
else
printf("Listen ...\n");
/*Accept*/
address_size=sizeof(address);
acc=accept(sock, (struct sockaddr*) &address, &address_size); //address oder sockaddr_in?
//bei while -> sizeof nicht in der Schleife
if (acc==-1)
printf("Verbinden fehlgeschlagen\n");
else
printf("Verbindung hergestellt - ein Client ist verbunden\n");
/*recv*/
size = recv(sock, buffer, sizeof(buffer)-1, 0);
if (size>0) {
buffer[size]='\0';
printf("Nachricht emfangen: %s\n", buffer);
}
/*close(sock);
return EXIT_SUCCESS;*/
}