رفتن به مطلب
  • 0

ارسال عکس از طریق سوکت tcp (اندروید استودیو و بیسیک)


hamed_ghorbani

سوال

سلام خسته نباشید

من میخواستم یه عکس رو از طریق سوکت tcp از اندروید استودیو به basic4android   و   basic4java ارسال کنم... کدهای ارسال رو از اندروید استودیو نوشتم و درست کار میکنه و درون بسیک هم برای دریافت درست کار میکنه ولی یه مشکلی که دارم اینه که اندروید استودیو فایل ارسالی رو به چندتا بخش که هر دفعه تعداد بخش ها فرق میکنه تقسیم میکنه و تو چند مرحله ارسال میکنه.. الان مشکلم همینجاست که تو چند مرحله ارسال میکنه و توی بسیک چجوری باید این بخش هارو بگیرم که تا اخر فایل رو دریافت کنم ؟ و اینکه هر جوری هم از اندروید استودیو ارسال میکنم توی این رویداد دریافت میشه :

Sub stream_NewData (Buffer() As Byte)
  
End Sub

راهی هم هست که موقع ارسال از طریق اندروید استودیو ، توی بسیک از طریق این رویداد دریافت بشه ؟

Sub stream_NewStream (Dir As String, FileName As String)
	
End Sub

 

اینم کدهای ارسال در اندروید استودیو هست:

import android.os.Handler
import java.io.*
import java.net.Socket
import java.net.UnknownHostException


class clientThread:Thread() {
    private var ip1:String=""
    private var port1:Int=5
    private lateinit var handler: Handler
    var writer : PrintWriter? = null
    var dos:DataOutputStream?=null

    override fun run() {
        super.run()
        try {
            val socket = Socket(ip1, port1)

            if (socket.isConnected){
                handler.sendMessage(handler.obtainMessage(0, "connected"))

                Thread {
                  val output = socket?.getOutputStream()
                        dos=DataOutputStream(output)

                    writer = PrintWriter(output!!, true)

                    val input = socket?.getInputStream()
                    val buffer=ByteArray(1024)
                    val res=ByteArrayOutputStream(1024)

                    try {
                        while(true){
                            val read = input.read(buffer)
                            if (read == -1) {
                                break
                            }
                            res.write(buffer, 0, read)
                            handler.sendMessage(
                                handler.obtainMessage(
                                    0,
                                    socket.isConnected.toString() + res.toString("UTF-8")
                                )
                            )
                        }
                    } catch (e: IOException) {
                        System.out.println(e)
                        socket.close()
                        input.close()
                        writer?.close()
                    }
                }.start()
            }

        }
        catch(u: UnknownHostException)
        {
            System.out.println(u)
        }
        catch(i:IOException)
        {
            System.out.println(i)
        }

    }

    fun setHandler(handler: Handler) {
        this.handler = handler
    }
    fun config(ip:String,port:Int){
        ip1=ip
        port1=port
    }

    fun sendMessage(out:ByteArray) {
        dos!!.write(out)
        dos!!.flush()

    }

    override fun destroy() {

    }

}

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

1 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

آقا زحمت نکشید حل شد باید موقع انشیالیز کردن استریم در بیسیک از مد prefix استفاده کنم

stream.InitializePrefix(NewSocket.InputStream,True,NewSocket.OutputStream,"stream")

و اینکه موقع ارسال در اندروید استودیو سایز کل رو هم قبلش ارسال کنم اینجوری:

dos!!.writeInt(out.size)
dos!!.write(out,0,out.size)
dos!!.flush()

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...