-
-
Save CarlEkerot/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(); | |
} | |
} |
@iamharshit it might be because 1.png is not a directory i.e /home/(your user name)/Desktop/1.png (if it has been saved to your desktop) so it doesn't know where to look for the file
(just a guess though)
How can i save file name that is sent from Client . @CarlEkerot
@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.
i am getting this error
any suggestions