Ciao ragazzi,
sto cercando di capire come gestire il traffico rete, però ci sono delle cose che non mi tornano e non capisco.
Vorrei quindi chiedere il vostro aiuto, perchè altrimenti mi ci vogliono 3 mesi per venirne fuori.
Ho scritto un po' di righe di codice:
Allora, questo codice funziona ma con qualche problemino, e cioè:
Quando clicco su "INVIA", mi da il messaggio "CONNESSO", però non invia i dati.
Per inviare i dati devo cliccare ancora su "INVIA" e allora esegue l'invio e la ricezione dei dati.
Se dopo tutta la procedura clicco una terza volta per ripeterla mi da l'errore "already connected".
Per risolvere il problema della connessione e invio diretto dei dati (anzichè dover cliccare 2 volte sul pulsante invia) ho spostato l'istruzione SendData all'interno della sub Client_Connected, però non so
se è corretto farlo e comunque non capisco perchè devo cliccare una prima volta per connettere e una
seconda per inviare visto che l'istruzione SendData è subito dopo l'istruzione Client.Connect.
Per evitare di vedere l'errore "already connected" ho messo all'interno della funzione SendData (alla fine) l'istruzione Client.close.
Questo comporta però che se clicco nuovamente su invia mi restituisce l'errore "null.pointer".
Insomma, un po' di cosette da capire
C'è qualche buon'anima che può chiarirmi un po' le idee?
Grazie.
Ciao.
sto cercando di capire come gestire il traffico rete, però ci sono delle cose che non mi tornano e non capisco.
Vorrei quindi chiedere il vostro aiuto, perchè altrimenti mi ci vogliono 3 mesi per venirne fuori.
Ho scritto un po' di righe di codice:
B4X:
Sub Process_Globals
Dim Client As Socket
End Sub
Sub Globals
Dim Vibrate As PhoneVibrate
Dim Const IP As String = "192.168.0.252"
Dim Const Port As Int = 80
Client.Initialize("Client")
Dim Astreams As AsyncStreams
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("ProvaRete")
TitleIconView.Bitmap=LoadBitmap(File.DirAssets, "icon.png")
End Sub
Sub btnInvia_Down
Dim command As String
Vibrate.Vibrate(100)
command="INVIO DATI "
Client.Connect(IP,Port,5000)
SendData(command)
End Sub
Sub Client_Connected (Successful As Boolean)
If Successful = False Then
Msgbox(LastException.Message, "Errore di connessione")
Return
End If
ToastMessageShow("Connesso",False)
Astreams.Initialize(Client.InputStream, Client.OutputStream, "AStreams")
End Sub
Sub AStreams_Error
ToastMessageShow("Errore", True)
End Sub
Sub SendData(text As String)
Dim buffer() As Byte
buffer = text.GetBytes("utf-8")
Astreams.Write(buffer)
End Sub
Sub AStreams_NewData (Buffer() As Byte)
Dim msg As String
msg = BytesToString(Buffer, 0, Buffer.Length,"utf-8")
ToastMessageShow(msg, False)
End Sub
Allora, questo codice funziona ma con qualche problemino, e cioè:
Quando clicco su "INVIA", mi da il messaggio "CONNESSO", però non invia i dati.
Per inviare i dati devo cliccare ancora su "INVIA" e allora esegue l'invio e la ricezione dei dati.
Se dopo tutta la procedura clicco una terza volta per ripeterla mi da l'errore "already connected".
Per risolvere il problema della connessione e invio diretto dei dati (anzichè dover cliccare 2 volte sul pulsante invia) ho spostato l'istruzione SendData all'interno della sub Client_Connected, però non so
se è corretto farlo e comunque non capisco perchè devo cliccare una prima volta per connettere e una
seconda per inviare visto che l'istruzione SendData è subito dopo l'istruzione Client.Connect.
Per evitare di vedere l'errore "already connected" ho messo all'interno della funzione SendData (alla fine) l'istruzione Client.close.
Questo comporta però che se clicco nuovamente su invia mi restituisce l'errore "null.pointer".
Insomma, un po' di cosette da capire
C'è qualche buon'anima che può chiarirmi un po' le idee?
Grazie.
Ciao.