2013-02-20 180 views
3

我見過很多從服務器發送文件到客戶端的例子。例如(發現here):Java套接字 - 從客戶端發送文件到服務器

服務器:

import java.io.BufferedInputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class Main { 
    public static void main(String[] args) throws IOException { 
    ServerSocket servsock = new ServerSocket(123456); 
    File myFile = new File("s.pdf"); 
    while (true) { 
     Socket sock = servsock.accept(); 
     byte[] mybytearray = new byte[(int) myFile.length()]; 
     BufferedInputStream bis = new BufferedInputStream(new FileInputStream(myFile)); 
     bis.read(mybytearray, 0, mybytearray.length); 
     OutputStream os = sock.getOutputStream(); 
     os.write(mybytearray, 0, mybytearray.length); 
     os.flush(); 
     sock.close(); 
    } 
    } 
} 

客戶:

import java.io.BufferedOutputStream; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.net.Socket; 

public class Main { 
    public static void main(String[] argv) throws Exception { 
    Socket sock = new Socket("127.0.0.1", 123456); 
    byte[] mybytearray = new byte[1024]; 
    InputStream is = sock.getInputStream(); 
    FileOutputStream fos = new FileOutputStream("s.pdf"); 
    BufferedOutputStream bos = new BufferedOutputStream(fos); 
    int bytesRead = is.read(mybytearray, 0, mybytearray.length); 
    bos.write(mybytearray, 0, bytesRead); 
    bos.close(); 
    sock.close(); 
    } 
} 

有沒有辦法改寫這個,或者類似的東西,要倒過來使用,所以客戶可以將文件發送到服務器嗎?

+1

只需切換寫入和讀取代碼。 – 2013-02-20 10:36:06

+0

這個代碼可以用來發送和接收所有類型的文件,如.mp3,.jpeg,.png等嗎? – 2013-07-31 11:26:45

回答

4

是的,可以做到。對於客戶端而言,不是從服務器請求文件,而是在本地讀取文件並寫入服務器的外部流。在服務器端,您將接受新的連接,並從服務器讀取客戶端發送的內容。

+0

這個代碼可以用來發送和接收所有類型的文件,如.mp3,.jpeg,.png等嗎? – 2013-07-31 11:27:19

+0

文件只是字節流。任何文件都可以發送/接收。 – 2017-01-18 08:37:37

相關問題