Winsocket und .txt schreiben
-
Hi
Ich habe einen Server mit Winsocket erstellt. Er empfängt nun von dem Client Dateien. Diese Empfangenen Dateien sollen in ein Text Dokument geschrieben werden. Leider zeigt der Kompiler mir immer folgende Fehler an (Dev C++).#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> using namespace std; void copy (istream& is, ostream& os); int start_winsock(); struct sockaddr_in me; int main() { char buf[1000]; long p; long rc; 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 failed\n"); return(0); } else printf("No error"); memset(&me, 0, sizeof(me)); // internet address family me.sin_family = AF_INET; // Port (change if you want) 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("No Fehler"); rc=listen(a,10); if(rc!=SOCKET_ERROR) printf("Kein Fehler ist listen"); c=accept(a,NULL,NULL); if(c!=INVALID_SOCKET) printf ("Verbunden\n"); ofstream o ("peter.txt"); rc=recv(c,buf,256,0); printf(buf); o.put(buf); o.close(); return 0; } int start_winsock() { WSADATA wsa; return(WSAStartup(MAKEWORD(2,0), &wsa)); }Nun die Fehlermeldung:
76 C:\Dokumente und Einstellungen\?Desktop\main.cpp invalid conversion from `char*' to `char'
76 C:\Dokumente und Einstellungen\Frederik\Desktop\main.cpp initializing argument 1 of `std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::put(_CharT) [with _CharT = char, _Traits = std::char_traits<char>]'C:\Dev-Cpp\Makefile.win [Build Error] ["../Dokumente und Einstellungen/Frederik/Desktop/main.o"] Error 1
-
Du willst Dateien in ein Textdokument schreiben? Hört sich seltsam an.
put erwartet jedenfalls einen einzelnen char als Parameter und du übergibst ein array.
-
Output fetched:
-
Ich hab es mit write versucht hat aber auch net gekapt:
if(c!=INVALID_SOCKET) printf ("Verbunden\n"); ofstream outfile ("new.txt",ofstream::binary); rc=recv(c,buf,256,0); printf(buf); outfile.write (buf); outfile.close(); return 0; }ERROR: 75 C:\Dokumente und Einstellungen\Frederik\Desktop\main.cpp no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::write(char[1000])'
note C:\Dev-Cpp\include\c++\3.4.2\bits\ostream.tcc:360 candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::write(const _CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]hat einer ne Idee
-
1. Prüfe rc!
(rc enthält die anzahl empfangenen zeichen, rc == 0 bedeuted disconnected, rc < 0 bedeuted Fehler)
2. Bevor Du printf oder ähnliche Funktionen mit buf benutzt, terminiere dein buf mit 0.3. Bei outfile.write(..) wird noch die länge des zu schreibenden buffers erwartet.
Bsp:
if(c!=INVALID_SOCKET) { printf ("Verbunden\n"); rc=recv(c,buf,256,0); if (0 == rc) { printf ("Getrennt\n"); } else if (0 > rc) { printf ("Fehler\n"); } else { buf[rc] = '\0'; printf(buf); ofstream outfile("new.txt",ofstream::binary); outfile.write (buf, rc); outfile.close(); } }
-
Danke. Klappt jetzt.

-
Verwendest du immer einfach so Funktionen ohne zu schauen wie man sie aufruft?
