Winsocket und Buffer||FTP Tutoriel
-
Hi. Wenn ich über den Buffer im Binärmodus eine Datei sende fügt er am Anfang immer zeichen ein, die eigentlich gar nicht gesendet wurden. In einem text Documen sehen sie so aus: > = ’|
Was soll ich tun. PS: in wircklichkeit möchte ich eine .mdb feil im Binärsytem auslesen und damm alle daten rübersenden und eine neue .mdb feil schreiben.
hat einer ne Idee?
Clientifstream peter ("C://test.mdb",ios::in|ios::binary); ofstream test("tect.mdb",ios::out|ios::binary); buffer = new char [1]; while(peter.read (buffer,1)) { //peter.read (buffer,1); send(s,buffer,1,0); cout <<buffer; test.write(buffer,1); //Sleep(3000); }char * bufe; ..... ofstream outfile ("C://peter.mdb",ios::out|ios::binary); int n=0; fstream f; bufe = new char [1]; while(n<10000) { if(recv(c,bufe,1,0)) { outfile.write(bufe,1); cout << bufe; } if(bufe=="s") n=100001; } [cpp]?

-
Hi kennt jemand ein gutes Tutoriel über ftp und c/c++. Ich kennt mitlerweile
Grundlagen in Winsockets und normalen C/C++. Weil ich aber Datei zwischen meinen Winsocket Client/Server austauschen will ich es aber über send() recv() net hinkriege brauche ich jetzt eine Tutoriel. Kennt jemande eins??
-
ifstream peter ("C://test.mdb",ios::in|ios::binary); ofstream test("tect.mdb",ios::out|ios::binary); //buffer = new char [1]; char buffer[2] = {}; // mit nullen initialisieren, und [2] damit hinter dem einen char immer noch ne abschliessende null steht // sonst weiss "cout" nämlich nicht wo der string zuende ist while(peter.read (buffer,1)) { send(s, buffer, 1, 0); cout << &buffer[0]; test.write(buffer, 1); } // socket schliessen... shutdown(s, SD_BOTH); closesocket(s);//char * bufe; char bufe[2] = {}; // siehe oben ..... ofstream outfile ("C://peter.mdb",ios::out|ios::binary); // int n=0; fstream f; // bufe = new char [1]; while(true) { // if(recv(c,bufe,1,0)) // { // outfile.write(bufe,1); // cout << bufe; //} int rc = recv(c, bufe, 1, 0); if (rc == 1) { // ein zeichen empfangen outfile.write(bufe, 1); cout << &bufe[0]; } else if (rc == 0) { // socket am anderen ende wurde geschlossen break; // schleife verlassen } else if (rc == SOCKET_ERROR) { // irgendein problem, z.b. verbindung abgerissen terminate(); } else { // sollte NIEMALS vorkommen terminate(); } // if(bufe=="s") // n=100001; }wenn du den socket nicht schliessen willst, nachdem das file übertragen wurde, musst du dir was anderes ausdenken. dein
bufe=="s"test kann auf jeden fall NICHT funktionieren.
-
Hi. danke hat mir schon sehr geholfen klappt aber immer noch net so ganz.
ich habe die Original und die Kopie mal im Editor geöffnet und folgenden Unterschied am Anfang festgestellt.
KOPIE: > = ’| 2
Original:
Hat einer eine Idee?
Oder kennt jemand ein gutes Tutoriel über C/C++ (winsocket am besten) und ftp?
-
zeig mal deinen aktuellen code, und zwar inklusive des teils, der den SOCKET erstellt ("s=socket(...)").
p.S.: und natürlich alles zwischen dem teil, und der sende-schleife auch.
-
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <stdio.h> #include <conio.h> #include <iostream> #include <conio.h> #include <fstream> #include <windows.h> #include <winable.h> #include <string> #include <cstdlib> #include <iostream> #include <time.h> #include <stdio.h> #include <io.h> #include <string.h> using namespace std; int start_winsock(); void copy (istream& is, ostream& os); int main() { long rc; SOCKET s; SOCKADDR_IN addr; char buf[256]; long size;; unsigned long lFileLen = 0; rc=start_winsock(); if (rc != 0) { printf("Fehler in start_winsock! Fehlercode: %d\n", rc); return 1; } else { printf("Winsock wurde gestartet!\n"); } s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); } else { printf("Socket erstellt!\n"); } memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family=AF_INET; addr.sin_port=htons(10001); // wir verwenden mal port 12345 addr.sin_addr.s_addr=inet_addr("192.168.178.23"); // zielrechner ist unser eigener rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError()); } else { printf("Verbunden \n"); } Sleep(600); rc=recv(s,buf,9,0) if (0 == rc) { printf ("Getrennt\n"); } else if (0 > rc) { printf ("Fehler\n"); } else { ifstream peter ("C://test.mdb",ios::in|ios::binary); ofstream test("tect.mdb",ios::out|ios::binary); char buffer[2] = {}; while(peter.read (buffer,1)) { send(s, buffer, 1, 0); cout << &buffer[0]; test.write(buffer, 1); } shutdown(s, SD_BOTH); closesocket(s); Sleep(6000); return 0; } int start_winsock() { WSADATA wsa; return(WSAStartup(MAKEWORD(2,0), &wsa)); }#include <cstdlib> #include <iostream> #include <fstream> #include <windows.h> #include <winable.h> #include <stdio.h> #include <conio.h> #include <time.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <winsock.h> #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <string> #include <iostream> using namespace std; void copy (istream& is, ostream& os); int start_winsock(); struct sockaddr_in me; int main() { string s; char buf[256]; char * bufe; long p; long rc; cout << bufe; SOCKET a;//accept Socket SOCKET c;//conncet Socket SOCKADDR_IN addr; rc=start_winsock(); if (rc==0) printf("Winsocket gestratet\n"); a= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (a == INVALID_SOCKET) { WSACleanup(); printf("Error \n"); return(0); } else printf("Socket Erstellt\n"); memset(&me, 0, sizeof(me)); me.sin_family = AF_INET; me.sin_port = htons(10001); me.sin_addr.s_addr=htonl(INADDR_ANY); p=bind(a, (struct sockaddr *) &me, sizeof(me)); if (p== SOCKET_ERROR) { printf("Error failed\n"); } else printf("Socket an Port 10001 gebunden\n"); rc=listen(a,10); if(rc!=SOCKET_ERROR) printf("Modus: Listen\n"); c=accept(a,NULL,NULL); if(c!=INVALID_SOCKET) { string pa; ofstream outfile ("C://peter.mdb",ios::out|ios::binary); int n=0; fstream f; char bufe[2] = {}; while(true) { int rc = recv(c, bufe, 1, 0); if (rc == 1) { outfile.write(bufe,1); cout << &bufe[0]; } else if (rc == 0) { // socket am anderen ende wurde geschlossen break; } else if (rc == SOCKET_ERROR) { // irgendein problem, z.b. verbindung abgerissen terminate(); } else { // sollte NIEMALS vorkommen terminate(); } } } printf(buf); return 0; } int start_winsock() { WSADATA wsa; return(WSAStartup(MAKEWORD(2,0), &wsa)); }
-
Danke ich habs geschahft!
Ich weiß zwar net woran es liegt, dass es jetzt klappt aber egal?int rc = recv(c, bufe, 1, 0); if (rc == 1) { if(n>7) { outfile.write(bufe,1); cout << &bufe[0]; } n++; }Naja suche jetzt mal nach nen Tutoriel über Winsocket und FTP.