diff --git a/app/src/androidMain/kotlin/com/aerotoss/transfer/AndroidTransferManager.kt b/app/src/androidMain/kotlin/com/aerotoss/transfer/AndroidTransferManager.kt index c1f60d9..3584e54 100644 --- a/app/src/androidMain/kotlin/com/aerotoss/transfer/AndroidTransferManager.kt +++ b/app/src/androidMain/kotlin/com/aerotoss/transfer/AndroidTransferManager.kt @@ -83,6 +83,9 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager try { socket.close() } catch (_: Exception) {} return } + socket.tcpNoDelay = false + socket.sendBufferSize = 1048576 + socket.receiveBufferSize = 1048576 withContext(Dispatchers.IO) { val progressId = UUID.randomUUID().toString() var actualFile: File? = null @@ -90,8 +93,8 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager try { socket.use { sock -> sock.soTimeout = 60_000 - val input = DataInputStream(sock.getInputStream()) - val output = DataOutputStream(sock.getOutputStream()) + val input = DataInputStream(BufferedInputStream(sock.getInputStream(), 262144)) + val output = DataOutputStream(BufferedOutputStream(sock.getOutputStream(), 262144)) val requestJson = input.readUTF() val request = try { @@ -135,7 +138,7 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager updateIncoming(progress.copy(state = TransferState.TRANSFERRING)) file.outputStream().use { fos -> - val buffer = ByteArray(65536) + val buffer = ByteArray(262144) var remaining = request.fileSize while (remaining > 0) { val toRead = minOf(buffer.size.toLong(), remaining).toInt() @@ -220,12 +223,16 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager val job = scope.launch { try { - val socket = Socket(targetHost, targetPort) + val socket = Socket() + socket.tcpNoDelay = false + socket.sendBufferSize = 1048576 + socket.receiveBufferSize = 1048576 + socket.connect(java.net.InetSocketAddress(targetHost, targetPort), 5000) activeSockets[requestId] = socket socket.use { sock -> - sock.soTimeout = 30_000 - val input = DataInputStream(sock.getInputStream()) - val output = DataOutputStream(sock.getOutputStream()) + sock.soTimeout = 60_000 + val input = DataInputStream(BufferedInputStream(sock.getInputStream(), 262144)) + val output = DataOutputStream(BufferedOutputStream(sock.getOutputStream(), 262144)) output.writeUTF(Json.encodeToString(TransferRequest.serializer(), request)) @@ -244,7 +251,7 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager var bytesSent = 0L var lastProgressTime = System.currentTimeMillis() var lastProgressBytes = 0L - val buffer = ByteArray(65536) + val buffer = ByteArray(262144) file.inputStream().use { fis -> while (true) { val read = fis.read(buffer) diff --git a/app/src/desktopMain/kotlin/com/aerotoss/transfer/DesktopTransferManager.kt b/app/src/desktopMain/kotlin/com/aerotoss/transfer/DesktopTransferManager.kt index 47e4047..c9b4262 100644 --- a/app/src/desktopMain/kotlin/com/aerotoss/transfer/DesktopTransferManager.kt +++ b/app/src/desktopMain/kotlin/com/aerotoss/transfer/DesktopTransferManager.kt @@ -80,6 +80,9 @@ class DesktopFileTransferManager : TransferManager { try { socket.close() } catch (_: Exception) {} return } + socket.tcpNoDelay = false + socket.sendBufferSize = 1048576 + socket.receiveBufferSize = 1048576 withContext(Dispatchers.IO) { val progressId = UUID.randomUUID().toString() var actualFile: File? = null @@ -132,7 +135,7 @@ class DesktopFileTransferManager : TransferManager { updateIncoming(progress.copy(state = TransferState.TRANSFERRING)) file.outputStream().use { fos -> - val buffer = ByteArray(65536) + val buffer = ByteArray(262144) var remaining = request.fileSize while (remaining > 0) { val toRead = minOf(buffer.size.toLong(), remaining).toInt() @@ -218,12 +221,16 @@ class DesktopFileTransferManager : TransferManager { val job = scope.launch { try { - val socket = Socket(targetHost, targetPort) + val socket = Socket() + socket.tcpNoDelay = false + socket.sendBufferSize = 1048576 + socket.receiveBufferSize = 1048576 + socket.connect(java.net.InetSocketAddress(targetHost, targetPort), 5000) activeSockets[requestId] = socket socket.use { sock -> - sock.soTimeout = 30_000 - val input = DataInputStream(sock.getInputStream()) - val output = DataOutputStream(sock.getOutputStream()) + sock.soTimeout = 60_000 + val input = DataInputStream(BufferedInputStream(sock.getInputStream(), 262144)) + val output = DataOutputStream(BufferedOutputStream(sock.getOutputStream(), 262144)) output.writeUTF(Json.encodeToString(TransferRequest.serializer(), request)) @@ -246,7 +253,7 @@ class DesktopFileTransferManager : TransferManager { var bytesSent = 0L var lastProgressTime = System.currentTimeMillis() var lastProgressBytes = 0L - val buffer = ByteArray(65536) + val buffer = ByteArray(262144) file.inputStream().use { fis -> while (true) { val read = fis.read(buffer)