-
-
Save carl-olin/2693246 to your computer and use it in GitHub Desktop.
| package client; | |
| import java.io.DataOutputStream; | |
| import java.io.FileInputStream; | |
| import java.io.IOException; | |
| import java.net.Socket; | |
| public class FileClient { | |
| private Socket s; | |
| public FileClient(String host, int port, String file) { | |
| try { | |
| s = new Socket(host, port); | |
| sendFile(file); | |
| } catch (Exception e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| public void sendFile(String file) throws IOException { | |
| DataOutputStream dos = new DataOutputStream(s.getOutputStream()); | |
| FileInputStream fis = new FileInputStream(file); | |
| byte[] buffer = new byte[4096]; | |
| while (fis.read(buffer) > 0) { | |
| dos.write(buffer); | |
| } | |
| fis.close(); | |
| dos.close(); | |
| } | |
| public static void main(String[] args) { | |
| FileClient fc = new FileClient("localhost", 1988, "cat.jpg"); | |
| } | |
| } |
| package server; | |
| import java.io.DataInputStream; | |
| import java.io.FileOutputStream; | |
| import java.io.IOException; | |
| import java.net.ServerSocket; | |
| import java.net.Socket; | |
| public class FileServer extends Thread { | |
| private ServerSocket ss; | |
| public FileServer(int port) { | |
| try { | |
| ss = new ServerSocket(port); | |
| } catch (IOException e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| public void run() { | |
| while (true) { | |
| try { | |
| Socket clientSock = ss.accept(); | |
| saveFile(clientSock); | |
| } catch (IOException e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| } | |
| private void saveFile(Socket clientSock) throws IOException { | |
| DataInputStream dis = new DataInputStream(clientSock.getInputStream()); | |
| FileOutputStream fos = new FileOutputStream("testfile.jpg"); | |
| byte[] buffer = new byte[4096]; | |
| int filesize = 15123; // Send file size in separate msg | |
| int read = 0; | |
| int totalRead = 0; | |
| int remaining = filesize; | |
| while((read = dis.read(buffer, 0, Math.min(buffer.length, remaining))) > 0) { | |
| totalRead += read; | |
| remaining -= read; | |
| System.out.println("read " + totalRead + " bytes."); | |
| fos.write(buffer, 0, read); | |
| } | |
| fos.close(); | |
| dis.close(); | |
| } | |
| public static void main(String[] args) { | |
| FileServer fs = new FileServer(1988); | |
| fs.start(); | |
| } | |
| } |
@Govind071995 just store it separately and transfer it before the fine content
Pretty Nice m8
you don't need to calculate the remining (file size), just read while there is a new line.
How would i modify this to allow for more than one client to be connected to the server and when a client sends a file, the server sends it to the other users.
when I transfer a small file, it work fine.
however, when I transfer a big file, client throws:
java.net.SocketException: Broken pipe
why? hope have a answer, thanks
change
while (fis.read(buffer) > 0) {
dos.write(buffer);
}
to
int read;
while ((read=fis.read(buffer)) > 0) {
dos.write(buffer,0,read);
}
-> now it works
Will it make the file read faster if its done using multiple threads using FileChannel?
int read; while ((read=fis.read(buffer)) > 0) { dos.write(buffer,0,read); }
Worked for me, thank you very much!
What is the filesize in serverside bro ? why did you set it equal 15123 ?
You guys need to set the size for the buffer as the same as your file, also fileSize, the best solution.

How can i save file name that is sent from Client . @CarlEkerot