FTP-Upload - Ohne library request
-
Hi,
Ich wollte mal selbst via WinSocket ein ftp-upload Programm schreiben, jedoch verstehe ich das empfangen der informationen nicht ganz.#pragma comment(lib,"WS2_32.lib") #include <iostream> #include <winsock2.h> bool Receive(SOCKET sock) { char buffer[1024]; int bytes; bytes = recv(sock,buffer,sizeof(buffer) - 1,0); if(bytes == -1) { printf("Failed at recv()\n"); return false; } buffer[bytes] = '\0'; printf("Server: %s\n\n",buffer); return true; } bool Send(SOCKET sock,std::string request) { char buffer[1024]; int bytes; bytes = send(sock,request.c_str(),request.size(),0); if(bytes == -1) { printf("Failed at send!\n"); return false; } return true; } int FtpUpload(std::string address,char* filename) { WSADATA w; if(int result = WSAStartup(MAKEWORD(2,2),&w) != 0) { return 1; } hostent* phe = gethostbyname(address.c_str()); int Socket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); if((phe == NULL) || (phe->h_addrtype != AF_INET) || (phe->h_length != 4) || (Socket == -1)) { return 1; } sockaddr_in service; service.sin_family = AF_INET; service.sin_port = htons(21); char** p = phe->h_addr_list; int result; do { if(*p == NULL) { return 1; } service.sin_addr.s_addr = *reinterpret_cast<unsigned long*>(*p); ++p; result = connect(Socket,reinterpret_cast<sockaddr*>(&service),sizeof(service)); }while(result == -1); printf("connected\n"); Receive(Socket); std::string request = "USER XXX PASS XXX"; Send(Socket,request.c_str()); Receive(Socket); printf("Done!\n"); closesocket(Socket); WSACleanup(); } int main(int argc,char* argv) { FtpUpload("192.168.2.129","test.txt"); system("pause >nul"); }
jedoch antwortet der server nur 1 mal.
Ich erhalte folgenden Output:
connected
Server: 220 (hier server infos)Done!
Ich habe im Internet kein Tutorial gefunden für FTP-Socket Programmierung nur verweise auf fertige Libs.
-
Hallo, lad dir mal Wireshark runter und schau z.b. was genau passiert wenn du dich an dem Server anmeldest und eine Datei hochlädst.
Mit Hilfe von Wireshark konnte ich meinen eigenen E-Mail Client schreiben.
Da musste ich die strings immer mit \n abschliessen ka ob das bei FTP auch so ist aber ich denke mal ja.
string send_mail ="From: <example@example.de>\n"; send_mail+="To: <example@example.de>\n"; send_mail+="Subject: hallo ich bin der betreff\n"; send_mail+="Date: We, 9 Jun 2010 12:10:00\n"; send_mail+="Text Zeile 1 der email \n"; send_mail+="\n"; // Zeilenumbruch in der E-Mail send_mail+="Text Zeile 2 der email\n"; send_mail+=".\n";
Wireshark Download Link: http://www.wireshark.org/download.html