我在java中使用服務器套接字概念來傳輸文件,如圖像和視頻。但是當我在客戶端收到時,我正在自定義文件名。我可以得到該文件的原始名稱嗎?服務器套接字文件傳輸
例如:
如果從服務器端的文件傳輸「的abc.txt」,我需要此相同的名稱在客戶端被反射(不通過單獨的名稱)。
在服務器端:
public class FileServer {
public static void main (String [] args) throws Exception {
// create socket
ServerSocket servsock = new ServerSocket(13267);
while (true) {
System.out.println("Waiting...");
Socket sock = servsock.accept();
System.out.println("Accepted connection : " + sock);
OutputStream os = sock.getOutputStream();
new FileServer().send(os);
sock.close();
}
}
public void send(OutputStream os) throws Exception{
// sendfile
File myFile = new File ("C:\\User\\Documents\\abc.png");
byte [] mybytearray = new byte [(int)myFile.length()+1];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.read(mybytearray,0,mybytearray.length);
System.out.println("Sending...");
os.write(mybytearray,0,mybytearray.length);
os.flush();
}
}
在客戶端:
public class FileClient{
public static void main (String [] args) throws Exception {
long start = System.currentTimeMillis();
// localhost for testing
Socket sock = new Socket("127.0.0.1",13267);
System.out.println("Connecting...");
InputStream is = sock.getInputStream();
// receive file
new FileClient().receiveFile(is);
long end = System.currentTimeMillis();
System.out.println(end-start);
sock.close();
}
public void receiveFile(InputStream is) throws Exception{
int filesize=6022386;
int bytesRead;
int current = 0;
byte [] mybytearray = new byte [filesize];
FileOutputStream fos = new FileOutputStream("def");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
do {
bytesRead =
is.read(mybytearray, current, (mybytearray.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);
bos.write(mybytearray, 0 , current);
bos.flush();
bos.close();
}
}
但事情是,即時通訊發送這樣的文件數組到客戶端。我不能將文件的名稱追加到文件的字節數組中。如果是,請告訴我如何去做。 – Arun
@Arun當然你可以,你只需要設計一個協議。你使用的是什麼序列化方法/協議?在問題中包含實際發送或接收文件的代碼(<15行)將非常有幫助。 – phihag
我用完整的源代碼編輯了我的問題。這實際上是從此問題中發佈的鏈接中獲取的。請幫助我。這麼晚纔回復很抱歉。 – Arun