Теперь это очень странно .... У меня есть два устройства для Android, в которых оба они работают один как сервер, а другой как клиент.Java Socket Отправка нескольких файлов, но полученных одним файлом?
Проблема заключается в том, что клиент отправляет файл через сокет. Сервер получит его в порядке. Но когда клиент пытается отправить несколько файлов, , тогда сервер получит только один файл ... почему так?
Я уже промывал сокет для каждого файла из списка (клиента). Но ... Почему код сервера (получателя) только записывает один файл в качестве вывода?
Please cmiiw.
Вот код для сервера (получение):
Socket bSock = serverSocket.accept();
DataInputStream inp = new DataInputStream(
bSock.getInputStream());
// reading the code first
int iCode = inp.readInt();
if(iCode == Request.STATE_FILESHARING){
// reading how many files will be found
int manyFile = inp.readInt();
String dName = null;
for (int index = 0; index < manyFile; index++) {
// reading the file name
dName = inp.readUTF();
// reading the file size
byte bp[] = new byte[inp.readInt()];
FileOutputStream fos = new FileOutputStream(SDTool.getCurrentLocalTransferPath() + "/" + dName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
// reading the content
int count;
int fsize = 0;
while ((count = inp.read(bp, 0, bp.length)) != -1) {
fsize += count;
bos.write(bp, 0, count);
// this will exist the loop of reading
if(fsize == bp.length)
break;
}
bos.close();
fos.close();
}
}
и вот код для Клиента (отправка):
socket = new Socket(myServerAddress, SocketServerPORT);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
double dTotalSize = getTotalSize(nList);
int iTotalTransferred = 0;
double dPercentage = 0;
DecimalFormat df = new DecimalFormat("#.00");
// sending multiple files state
out.writeInt(Request.STATE_FILESHARING);
// sending how many files required to be accepted
out.writeInt(nList.size());
for (Item o : nList) {
File myFile = new File(o.getPath());
byte[] mybytearray = new byte[(int) myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
// bis.read(mybytearray, 0, mybytearray.length);
// set the code, the file name, and then the size
out.writeUTF(myFile.getName());
out.writeInt(mybytearray.length);
int len = 0; int fsize = 0;
// here is the content
while ((len = bis.read(mybytearray)) != -1) {
fsize += len;
dPercentage = (double) ((fsize * 100)/dTotalSize);
dPercentage = Math.round(dPercentage);
out.write(mybytearray, 0, len);
updateProgressUploadUI(dPercentage);
if(fsize == mybytearray.length){
out.flush();
}
}
bis.close();
fis.close();
}
Пожалуйста, расскажите, как сервер должен знать, что больше файлов идет. Какой протоколл существует между сервером и клиентом? Что посылает клиент? Пожалуйста, объясните это первым. Объясните код. – greenapps
и когда дело доходит до протоколов, рассмотрите этот http://code.google.com/p/protobuf/ – pskink
, я думаю, на стороне сервера, я должен поставить ... этот алгоритм: «Когда он достигнет конечной длины байты.Он должен разорвать цикл чтения содержимого. И начать новую операцию FileIO «Правильно ли я? @greenapps – gumuruh