2013-10-17 13 views
0

我有一個客戶端和一臺服務器通過TCP套接字相互通信。客戶想要將兩個文件和一些文件的描述傳輸到服務器。我想設計一個協議,一旦在客戶端和服務器之間建立套接字,服務器就會期望先接收文件描述,然後再接收這兩個文件。目前,使用以下代碼,服務器可以接收描述,但無法區分這兩個文件(將從客戶端傳輸的兩個文件合併爲服務器上的一個文件)。我在這個問題上發現了類似的線程。但他們分別討論了「文件信息+單個文件」和「沒有預先文件信息的多個文件」。請給我一個解決這個問題的提示。非常感謝。如何在Java中通過套接字傳輸文件信息和多個文件?

Sever的端代碼

dis = new DataInputStream(clientSocket.getInputStream()); 
callInfo = dis.readUTF(); 
callInfos = callInfo.split(" "); 

FileOutputStream fos = new FileOutputStream(File1); 
byte[] buffer = new byte[clientSocket.getReceiveBufferSize()]; 
int bytesReceived = 0; 
while ((bytesReceived = dis.read(buffer)) > 0) 
    fos.write(buffer, 0, bytesReceived); 
fos.flush(); 
fos.close(); 

fos = new FileOutputStream(File2); 
while ((bytesReceived = dis.read(buffer)) > 0) 
    fos.write(buffer, 0, bytesReceived); 
fos.flush(); 
fos.close(); 

客戶端代碼

String fileIno = "fileIno"; 
byte[] buffer = new byte[socket.getSendBufferSize()]; 
int bytesRead = 0; 
DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); 
dos.writeUTF(fileInfo); 

FileInputStream file = new FileInputStream(File1); 
while ((bytesRead = file.read(buffer)) > 0) 
    dos.write(buffer, 0, bytesRead); 
dos.flush(); 
file.close(); 

file = new FileInputStream(File2); 
while ((bytesRead = file.read(buffer)) > 0) 
    dos.write(buffer, 0, bytesRead); 
dos.flush(); 
file.close(); 

回答

0

設計您協議,使得「文件描述」信息包括在每個文件中的字節數。然後你會知道第一個文件開始和結束的位置以及第二個文件開始和結束的位置。

相關問題