Dateiübertragung über Socket funktioniert nicht richtig?
Verfasst: Mo Apr 25, 2016 1:33 am
Ich versuche nun schon seit einigen Tagen Bilder und andere Dateien als nur text und html Dateien über ein Socket an den Client zu schicken aber leider komme ich gerade einfach nicht weiter. Ich habe eine Funktion geschrieben um die Dateien erst einmal in einen Buffer zu lesen und anschließend mit write an den Client zu schicken aber das funktioniert derzeit, wie oben schon geschrieben nur mit html- und Textdateien, wie es scheint.
Ich habe auch schon eine Funktion um den mime Typen zu bestimmen und in dem Content Type dementsprechend einzutragen und außerdem berechne ich auch die Content Length aber leider kriege ich es einfach nicht hin, dass die Bilder angezeigt werden und das die Javascript Datei auch funktioniert. So sieht bspw. eine Response von meinem Webserver aus. Ich habe dafür die Software "Burp Suite" verwendet, damit ich mir die Response anschauen kann.
Die Bilder lasse ich hier jetzt lieber mal aus, weil das einfach zu viel für den Beitrag wäre und mit Sicherheit den Rahmen sprengen würde. In der Response steht dann aber auch der richtige Content Type usw. aber die Bilder werden nicht dargestellt und die JS Datei funktioniert auch nicht, also wenn die Seite geladen wurde passiert nichts und wenn ich auf den Text klicke passiert nichts.
Das Öffnen der Dateien und finden der Dateien und vieles anderes funktioniert schon, von dem was ich mir bei der Programmierung eines eigenen Webservers vorgestellt habe aber das mit den Dateien, wie jpeg, png, js usw. leider nicht, obwohl er die Dateien doch anscheinend an den Client, also mich schickt? Was mache ich also falsch?
Ich komme nicht weiter ...
Code: Alles auswählen
int send_resource(int nsockfd, int fd) {
char buf[FILE_BUF] = {0};
int bytes_to_write = read(fd, buf, sizeof(buf));
if(bytes_to_write < 0) {
exit(1);
}
void *ptr = buf;
while(bytes_to_write > 0) {
int bytes_written = write(sockfd, ptr, bytes_to_write);
if(bytes_written <= 0) {
exit(1);
}
bytes_to_write -= bytes_written;
ptr += bytes_written;
}
return 1;
}
Code: Alles auswählen
HTTP/1.1 200 OK
Server: Custom Webserver
Content-Type: text/html
Content-Length: 438
<html>
<head>
<title>Test file</title>
<script language="JavaScript" src="js/javascript.js" ></script>
</head>
<body>
<p> A simple test file ...
<br/>
<a href="javascript:testf();">Click</a>
<script>testf();</script>
</p>
</body>
</html>
Code: Alles auswählen
HTTP/1.1 200 OK
Server: Custom Webserver
Content-Type: text/javascript
Content-Length: 74
function testf() {
alert("The js file has been loaded");
}
Das Öffnen der Dateien und finden der Dateien und vieles anderes funktioniert schon, von dem was ich mir bei der Programmierung eines eigenen Webservers vorgestellt habe aber das mit den Dateien, wie jpeg, png, js usw. leider nicht, obwohl er die Dateien doch anscheinend an den Client, also mich schickt? Was mache ich also falsch?
Ich komme nicht weiter ...