Şu anda Android cihazım için küçük bir soket uygulaması oluşturmaya çalışıyorum.Android büyük dosyaları soket aracılığıyla gönder
Dizüstü bilgisayarım/PC'mize ya da her neyse bir soket bağlantısıyla büyük dosyaları (~ 500MB) göndermek istiyorum. Ben bir test alanı (~ 460MB) benim app çöküyor göndermeye çalıştığınızda, benim PC soket sunucusuna bağlanmak ancak benim Android cihazınızda bir soket istemcisi kullanıyorum ve şöyle der:
Ben müvekkilim dosya boyutunu işleyemez sanırım. Yani benim sorum: bir TCP soket bağlantısı ile böyle büyük dosyaları işlemek için bir yol var mı? Kodum küçük dosyalar (ör. 5MB) ile iyi çalışır, ancak daha büyük dosyalarla başarısız olur."OutOfMemoryError Fırlatma " "OOM kadar 441616290 bayt allocationwith 4194304 serbest bayt ve 90MB ayrılamadı"
İstemci tarafı benim android cihaz üzerinde çalışan:
Bu
Bugüne kadar ne varprivate class Connecting extends AsyncTask<String, Integer, String>
{
@Override
protected String doInBackground(String... serverAdd)
{
String filePath = "Path to file";
File sdFile = new File(filePath);
try {
client = new Socket("ip", "port");
outputStream = client.getOutputStream();
byte[] buffer = new byte[1024];
FileInputStream in = new FileInputStream(sdFile);
int rBytes;
while((rBytes = in.read(buffer, 0, 1024)) != -1)
{
outputStream.write(buffer, 0, rBytes);
}
outputStream.flush();
outputStream.close();
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
Sunucu tarafı:
public class Main {
private static ServerSocket serverSocket;
private static Socket clientSocket;
private static InputStream inputStream;
private static FileOutputStream fileOutputStream;
private static BufferedOutputStream bufferedOutputStream;
private static int filesize = 10000000;
private static int bytesRead;
private static int current = 0;
public static void main(String[] args) throws IOException {
serverSocket = new ServerSocket(10898);
System.out.println("Server started. Listening to the port 10898");
clientSocket = serverSocket.accept();
byte[] mybytearray = new byte[filesize];
inputStream = clientSocket.getInputStream();
fileOutputStream = new FileOutputStream("E:\\output.zip");
bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
System.out.println("Receiving...");
bytesRead = inputStream.read(mybytearray, 0, mybytearray.length);
current = bytesRead;
do {
bytesRead = inputStream.read(mybytearray, current, (mybytearray.length - current));
if (bytesRead >= 0) {
current += bytesRead;
}
} while (bytesRead > -1);
bufferedOutputStream.write(mybytearray, 0, current);
bufferedOutputStream.flush();
bufferedOutputStream.close();
inputStream.close();
clientSocket.close();
serverSocket.close();
System.out.println("Sever recieved the file");
}
}
Selamlamak
[DÜZENLE]: Müşteri kodu.
Dosyanızı daha küçük dosyalara ayırmanız gerekir; bunlar genellikle yığınlar olarak adlandırılır. İşte bir örnek: C: http://stackoverflow.com/questions/1628587/writing-memory-to-socket-in-chunks-in-c – Cookster
Tüm dosyayı bir kerede okuma, bunu yap daha küçük parçalar. – Buddy
Tamam, bu bilgi için teşekkür ederim, çünkü bu kodu incelemek için biraz zamana ihtiyacım var çünkü c ile aşina değilim. –