tja ja ööö ... vergehen keine 4 stunden, schon bin ich beim nexten problem: ich wollt das ganze jetzt einfach in ein "charartiges" gebilde umwandeln ... ich glaub ich bin da etwas falsch rangegangen ... hier wie vorhin auch schon code und output:
server:
Code:
#include <iostream.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <errno.h>
int main() {
int Msocket=0;
int sende=0;
char buffer[10000];
char buffer2[10000];
socklen_t Msocketaddrsize;
sockaddr_in Msocketaddr;
sockaddr_in Macceptaddr;
int Mconnectsocket;
int status; // 0=not connectet, 1==connectet, 2==close connection
memset(&Msocketaddrsize, 0, sizeof(Msocketaddrsize));
memset(&Msocketaddr, 0, sizeof(Msocketaddr));
memset(&Macceptaddr, 0, sizeof(Macceptaddr));
Msocket = socket(AF_INET, SOCK_STREAM, 0);
if(Msocket < 0) cout<<"fehler beim socket"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
cout<<"socket erstellt"<<endl;
Msocketaddr.sin_family = AF_INET;
Msocketaddr.sin_port = htons(34343);
Msocketaddr.sin_addr.s_addr = INADDR_ANY;
if(bind(Msocket, (sockaddr*) &Msocketaddr, sizeof(Msocketaddr)) == -1) cout<<"fehler beim bind"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
cout<<"socket gebindet"<<endl<<"socket startet hören"<<endl;
for(int i=0; i==0; i=0) {
if(listen(Msocket, 2) < 0) cout<<errno<<endl<<"fehler beim listen"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
cout<<"socket hört"<<endl;
Msocketaddrsize = sizeof(sockaddr_in);
Mconnectsocket = accept(Msocket, (sockaddr*) &Macceptaddr, (socklen_t*) &Msocketaddrsize);
cout<<"socket hat verbindung angenommen"<<endl;
status=1;
while(status==1){
if(recv(Msocket, buffer, 10000, 0) == -1) cout<<"fehler beim empfangen der daten"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
cout<<buffer<<endl;
// if(buffer=="exit") exit(0);
cin>>buffer2;
if(send(Mconnectsocket, buffer2, sizeof("Hello World"), 0) == -1) cout<<"fehler beim senden der daten"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
}
}
}
client:
Code:
#include <unistd.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <iostream.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
int main(int argc, char *argv[]) {
int Msocket=0;
sockaddr_in Msockaddr;
char hostname[MAXHOSTNAMELEN];
hostent *host;
char buffer[10000];
char buffer2[10000];
int recive=0;
int status=0; // status. 0==not connectet, 1==conectet, 2==close connection
memset(&Msockaddr, 0, sizeof(Msockaddr));
memset(&host, 0, sizeof(host));
if(argc < 2){
cout<<"kein hostname angegeben. bitte sockets_client hostname starten."<<endl;
exit(0);
}
cout<<argv[1]<<endl;
strcpy(hostname, argv[1]);
host=gethostbyname(hostname);
cout<<"die ip ist: "<<inet_ntoa(*((in_addr *)host->h_addr))<<endl;
Msocket = socket(AF_INET, SOCK_STREAM, 0);
Msockaddr.sin_family = AF_INET;
Msockaddr.sin_port = htons(34343);
Msockaddr.sin_addr.s_addr = *((in_addr_t *)host->h_addr);
// Msockaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
cout<<"connecting ..."<<endl;
if(connect(Msocket, (sockaddr*) &Msockaddr, sizeof(Msockaddr)) == -1) cout<<"fehler beim verbinden"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
cout<<"connected! well done!"<<endl;
status=1;
while(status==1){
if(recv(Msocket, buffer, 10000, 0) == -1) cout<<"fehler beim empfangen der daten"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
cout<<buffer<<endl;
// if(buffer=="exit") exit(0);
cin>>buffer2;
if(send(Msocket, buffer2, sizeof(buffer), 0) == -1) cout<<"fehler beim senden der daten"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
}
}
so ... und nun der output:
server:
socket erstellt
socket gebindet
socket startet hören
socket hört
socket hat verbindung angenommen
sende hello world
fehler beim empfangen der daten
107 -- Transport endpoint is not connected
client:
localhost
die ip ist: 127.0.0.1
connecting ...
connected! well done!
beide programme würden nach diesem output noch weiterlaufen. falls ich in einem etwas eingeben, oder gar exit eingebe funktioniert interessiert das das andere überhauptnicht.
danke schonmal für die bisherige hilfe ...
Lesezeichen