Exe Datein auf Winsock Server ausführen
-
Hallo ich versuche gerade eine Exe Datei auf meinem Winsock Server auszuführen.
Mit Text Datein habe ich es schon geschafft.
Client:
#include <windows.h> #include <iostream.h> #include <fstream.h> using namespace std; int main() { char buf2[256]; long rc; long zeichen_anzahl; int nret; char buf[256]; SOCKET kSock; WSAData wsdata; WORD wsver=MAKEWORD(2, 0); nret = WSAStartup(wsver, &wsdata); cout<<"Initialisierung erfolgreich"<<endl; kSock = socket(AF_INET, SOCK_STREAM, 0); cout<<"Socket wurde Initialisiert"<<endl; sockaddr_in sin; sin.sin_port=htons(12345); sin.sin_addr.s_addr=inet_addr("127.0.0.1"); sin.sin_family=AF_INET; rc = connect(kSock,(sockaddr*)&sin, sizeof(sin)); while( rc != SOCKET_ERROR) { cout<<"start = taste"; cin.get(); ifstream file; file.open("test.txt"); for (int j=0;j<4;j++) { file >> buf[j]; } file.close(); send(kSock,buf,256,0); zeichen_anzahl = recv(kSock, buf2, 256, 0); buf2[zeichen_anzahl]='\0'; cout<<"Server Antwort: "<<buf2<<endl; } system("PAUSE"); closesocket(kSock); return 0; }Server:
#include <windows.h> #include <conio> #include <iostream> using namespace std; int main() { char buf[256] ; char buf2[256]= "test"; long rc; SOCKET kSock; SOCKET client; int len; WSAData wsdata; WORD wsver=MAKEWORD(2, 0); int nret=WSAStartup(wsver, &wsdata); kSock=socket(AF_INET, SOCK_STREAM, 0); cout<<"Server"<<endl; sockaddr_in sin; sin.sin_port=htons(12345); sin.sin_addr.s_addr=INADDR_ANY; sin.sin_family=AF_INET; bind(kSock,(sockaddr*)&sin, sizeof(sin)); rc = listen(kSock,10); client=accept(kSock,NULL,NULL); while(rc!=SOCKET_ERROR) { send(client,buf2,strlen(buf2),0); rc = recv(client,buf,256,0); cout<<"Client sendet: "<<buf<<endl; } system("PAUSE"); closesocket(client); closesocket(kSock); WSACleanup(); return 0; }Bei Google konnte ich leider nocht nichts brauchbares finden ...
-
Empfangene Daten in .exe schreiben und mit system() ausführen, wo ist das Problem?
-
Wie meinst du das genau ?
Ich hab vorhin einfach mal eine Hello World gemacht das dann test.txt genannt und dann einfach so behandelt wie eine Text Datei also rüber an den Server gesendet.
Und dann am Server mit system( ); ausgeführt.
Dann kommt die Fehlermeldung das die Datei MZP nicht gefunden werden kann.
Wie genau meinst du das mit dem "in exe schreiben" ?
-
achso!
Habs gecheckt. Danke dir
-
Hab ich gar nicht dummer Namens faker -.-
-
So das hier ist mein registierter Account.
Kann mir wer das jetzt vielleicht nochmal plz erklären mit dem Server ?
-
Programm a): öffnet Datei und benutzt eine der send APIs um Datei an Programm b) zu senden
Programm b): benutzt eine der read/receive APIs um empfangene Daten in eine Datei zu schreiben und ruft diese Datei anschließend mit system() auf
-
Es klappt noch immer nicht

Client:
#include <windows.h> #include <iostream.h> #include <fstream.h> using namespace std; int main() { long groesse; char buf2[256]; long rc; long zeichen_anzahl; int nret; char * buf[256]; ifstream datei; SOCKET kSock; WSAData wsdata; WORD wsver=MAKEWORD(2, 0); nret = WSAStartup(wsver, &wsdata); cout<<"Initialisierung erfolgreich"<<endl; kSock = socket(AF_INET, SOCK_STREAM, 0); cout<<"Socket wurde Initialisiert"<<endl; sockaddr_in sin; sin.sin_port=htons(12345); sin.sin_addr.s_addr=inet_addr("127.0.0.1"); sin.sin_family=AF_INET; rc = connect(kSock,(sockaddr*)&sin, sizeof(sin)); long size; ifstream infile ("notepad.exe",ifstream::binary); infile.seekg(0,ifstream::end); size=infile.tellg(); infile.seekg(0); buf[1] = new char [size]; infile.read (buf[1],size); infile.close(); while( rc != SOCKET_ERROR) { send ( kSock , *buf, size ,0 ); zeichen_anzahl = recv(kSock, buf2, 90000, 0); buf2[zeichen_anzahl]='\0'; cout<<"Server Antwort: "<<buf2<<endl; } system("PAUSE"); closesocket(kSock); return 0; }Server:
#include <windows.h> #include <conio> #include <iostream> #include <fstream> using namespace std; int main() { long zeichen_anzahl; char buf[256] ; char buf2[256]= "test"; long rc; SOCKET kSock; SOCKET client; int len; WSAData wsdata; WORD wsver=MAKEWORD(2, 0); int nret=WSAStartup(wsver, &wsdata); ofstream outfile ("test.exe",ofstream::binary); long size; kSock=socket(AF_INET, SOCK_STREAM, 0); cout<<"Server"; sockaddr_in sin; sin.sin_port=htons(12345); sin.sin_addr.s_addr=INADDR_ANY; sin.sin_family=AF_INET; bind(kSock,(sockaddr*)&sin, sizeof(sin)); rc = listen(kSock,10); client=accept(kSock,NULL,NULL); while(rc!=SOCKET_ERROR) { // send(client,buf2,strlen(buf2),0); rc = recv(client,buf,90000,0); outfile.write (buf,90000); outfile.close(); // cout<<"Client sendet: "<<buf<<endl; } system("PAUSE"); closesocket(client); closesocket(kSock); WSACleanup(); return 0; }Ich bekomme immer eine EAcess Violation vom Server

Aus infile werden 70144 Zeilen ausgelesen.
Und als Länge von buf habe ich 90000 Eingetragen daran kann es doch nicht liegen oder?Was mache ich da falsch ?
-
buf ist 256 Bytes groß und du schreibst ca. das 300 fache davon rein, ist doch klar, dass da etwas schief geht...
-
Jo stimmt das war ein dummer Fehler ...
Jetzt funktioniert es aber danke für die Hilfe.
Client:
#include <windows.h> #include <iostream.h> #include <fstream.h> using namespace std; int main() { long groesse; char recv_buf[256]; long rc; long zeichen_anzahl; int nret; char * send_buf[90000]; ifstream datei; SOCKET kSock; WSAData wsdata; WORD wsver=MAKEWORD(2, 0); nret = WSAStartup(wsver, &wsdata); cout<<"Initialisierung erfolgreich"<<endl; kSock = socket(AF_INET, SOCK_STREAM, 0); cout<<"Socket wurde Initialisiert"<<endl; sockaddr_in sin; sin.sin_port=htons(12345); sin.sin_addr.s_addr=inet_addr("127.0.0.1"); sin.sin_family=AF_INET; rc = connect(kSock,(sockaddr*)&sin, sizeof(sin)); long size; ifstream infile ("notepad.exe",ifstream::binary); infile.seekg(0,ifstream::end); size=infile.tellg(); infile.seekg(0); send_buf[2] = new char [size]; infile.read (send_buf[2],size); infile.close(); while( rc != SOCKET_ERROR) { send ( kSock , send_buf[2], size ,0 ); zeichen_anzahl = recv(kSock ,recv_buf, 256 , 0); recv_buf[zeichen_anzahl]='\0'; // cout<<"Server Antwort: "<<buf2<<endl; // delete[] buf; } cout<<"Ende"<<endl; system("PAUSE"); closesocket(kSock); WSACleanup(); return 0; }Server
#include <windows.h> #include <conio> #include <iostream> #include <fstream> using namespace std; int main() { long zeichen_anzahl; char buf[90000] ; char send_buf[256]= "test"; long rc; SOCKET kSock; SOCKET client; int len; WSAData wsdata; WORD wsver=MAKEWORD(2, 0); int nret=WSAStartup(wsver, &wsdata); ofstream outfile ("test.exe",ofstream::binary); kSock=socket(AF_INET, SOCK_STREAM, 0); cout<<"Server"; sockaddr_in sin; sin.sin_port=htons(12345); sin.sin_addr.s_addr=INADDR_ANY; sin.sin_family=AF_INET; bind(kSock,(sockaddr*)&sin, sizeof(sin)); rc = listen(kSock,10); client=accept(kSock,NULL,NULL); char save[256]; char str[256]; while(rc!=SOCKET_ERROR) { send(client,send_buf,strlen(send_buf),0); rc = recv(client, & buf[2] ,90000,0); // cout<<"Client sendet: "<< buf[1] <<endl; outfile.write ( & buf[2] , 90000); outfile.close(); } system("PAUSE"); closesocket(client); closesocket(kSock); WSACleanup(); return 0; }
-
Ok das hier gehört nicht zum Server:
char save[256];
char str[256];War noch von ein paar Experimenten mit drin^^