Pour comprendre le concept de programmation de socket, j'ai créé un serveur et un client. Le client enverra un fichier et le serveur devrait le sauvegarder. (c'est-à-dire un téléchargement de fichier).Téléchargement de fichier à l'aide de ServerSocket & HTML Client. Stuck at InputStream.read()
Serveur:
package com.test.socket.server;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class WebServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8081);
Socket socket = serverSocket.accept();
System.out.println("Received request");
InputStream inputStream = socket.getInputStream();
OutputStream out = new FileOutputStream("yoyo.png");
System.out.println("Reading....");
byte[] bytes = new byte[16 * 1024];
int count = 0;
while((count = inputStream.read(bytes)) > 0){
System.out.print(". ");
out.write(bytes,0,count);
System.out.println("Some bytes are written");
}
System.out.println("written....");
socket.getOutputStream().write("Written.....".getBytes());
out.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}
client Java suit:
package com.test.socket.client;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class WebClient {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = null;
String host = "127.0.0.1";
socket = new Socket(host, 8081);
///home/renju/Desktop/frame.png
File file = new File("/home/renju/Desktop/frame.png");
InputStream inputStream = new FileInputStream(file);
OutputStream os = socket.getOutputStream();
byte[] bytes = new byte[16 * 1024];
int count = 0;
while((count = inputStream.read(bytes)) > 0){
os.write(bytes);
}
System.out.println("Sending....");
os.close();
inputStream.close();
socket.close();
}
}
Cela fonctionne bien et écrit le fichier téléchargé sur mes projets dossier racine. Maintenant, j'ai changé le client en une page HTML.
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="http://127.0.0.1:8081/" method="POST">
<input type="file" name="file" />
<button type="submit" name="submit">Upload</button>
</form>
</body>
</html>
Ce ne fonctionne pas de la même façon que le client Java. Pour une raison quelconque, l'exécution ne va pas au-delà du out.write(bytes);
du code serveur.
journal de la console ..
Received request
Reading....
. Some bytes are written
Quelle peut être la raison possible?
Une question ...
En fin de compte ce que je suis en train de comprendre est le but de « multipart/form-data » en téléchargeant un fichier (une fois que je suis arrivé à travailler le code ci-dessus, qui est ce que je suis planification d'expérimenter). Si quelqu'un pouvait me donner un indice, ce serait très utile.
Pour clarifier, vous pouvez télécharger une image bien, mais quand vous essayez de télécharger la page HTML, ce qui se passe? – finnrayment
Pardonnez-moi, j'ai mal lu. Ignorer le commentaire supprimé. – finnrayment
Votre client Java ne parle pas HTTP, mais votre navigateur est client, vous devez donc implémenter HTTP sur votre serveur. Voir RFC 2616 et successeurs. Trop large. – EJP