Hello,
I am using the SSLSocket Library (http://www.b4x.com/android/forum/attachments/socketssl-zip.13485/) and I am using it with AsyncStreamsSSL.
I am able to connect to the device I want to connect to, and seem to get new data from this device. (so far so good)
However when I connect I need to send a username to the device. The device I am connecting to will automatically send the word 'Username: ' (without the quote symbols).
Now the tricky part.. I want to capture the incoming data and then make my app automatically send the reply to the device automatically.
Here is what I have done so far..
When the app starts it will connect to my device..
So far the above will connect to the device and will log if it was connected or not.
Once it's connected the following sub is fired when any incoming data is sent to my app from this connection.
The following sub is how I am sending the data to my device..
Now when I run my app it will connect to my device, and will receive all the incoming data from it.
As you will see in the following screenshot it seems to log the 'Username: ' on a separate line and it doesn't log anything on the first line.
However it doesn't send the outgoing data.
Now I split up the incoming data as it seems to log it on different lines (must have a CRLF between the commands) so my incoming AStreams_NewData sub now looks like the following:
Now when I run my app it captures the 'Username: ' part and now sends the data like it should of in the first place.
However, now I am forced with another issue..
When I view the log it seems to Log the reply on separate lines where it should be all on one line. (The device I am connected to will reply back the username I send and should be all one message.)
Is there something I am doing wrong to why it's splitting up the incoming data into separate messages or is it the SSLSocket Library I am using (Is there a new version available - I am using version 1.10 of the SSLSocket Library)?
I know that device I am connecting to is sending the data out correctly as I am able to use a software package that connects in the same way and is working fine with this same device.
Anyone got any ideas ?
I am using the SSLSocket Library (http://www.b4x.com/android/forum/attachments/socketssl-zip.13485/) and I am using it with AsyncStreamsSSL.
I am able to connect to the device I want to connect to, and seem to get new data from this device. (so far so good)
However when I connect I need to send a username to the device. The device I am connecting to will automatically send the word 'Username: ' (without the quote symbols).
Now the tricky part.. I want to capture the incoming data and then make my app automatically send the reply to the device automatically.
Here is what I have done so far..
When the app starts it will connect to my device..
B4X:
Sub Class_Globals
Dim my_ssl_socket As SocketSSL
Dim AStreams_ssl As AsyncStreamsSSL
End Sub
Sub Activity_Create(FirstTime As Boolean)
my_ssl_socket.Initialize("my_ssl_socket")
my_ssl_socket.Connect("192.168.0.100","3055",5000) 'connects to my device
End Sub
Sub my_ssl_socket_Connected (Successful As Boolean)
If Successful Then
Log("Connected") 'Log it saying the connection was made
AStreams_ssl.Initialize(my_ssl_socket.InputStream ,my_ssl_socket.OutputStream ,"AStreams")
Else
Log("Connection Failed") 'Couldn't connect to the device so Log it
End If
End Sub
So far the above will connect to the device and will log if it was connected or not.
Once it's connected the following sub is fired when any incoming data is sent to my app from this connection.
B4X:
Sub AStreams_NewData (Buffer() As Byte)
' Incoming data from connection
Dim msg As String
msg = BytesToString(Buffer, 0, Buffer.Length, "ASCII")
Log("incoming data - " & msg)
If msg = "Username: " Then 'Yes there is meant to be a space at the end
SendData("aaron" & Chr(13))
End If
End Sub
The following sub is how I am sending the data to my device..
B4X:
Sub SendData(msg As String)
Dim Buffer() As Byte
Buffer = msg.GetBytes("UTF8")
AStreams_ssl.Write(Buffer)
AStreams_ssl.Write(Array As Byte(254))
Log("outgoing data - " & msg)
End Sub
Now when I run my app it will connect to my device, and will receive all the incoming data from it.
As you will see in the following screenshot it seems to log the 'Username: ' on a separate line and it doesn't log anything on the first line.
However it doesn't send the outgoing data.
Now I split up the incoming data as it seems to log it on different lines (must have a CRLF between the commands) so my incoming AStreams_NewData sub now looks like the following:
B4X:
Sub AStreams_NewData (Buffer() As Byte)
' Incoming data from connection
Dim msg As String
msg = BytesToString(Buffer, 0, Buffer.Length, "ASCII")
Log("incoming data - " & msg)
Dim strBeforeSplit As String
strBeforeSplit=msg
Dim strSplit() As String
strSplit=Regex.Split(CRLF,strBeforeSplit)
For x = 0 To strSplit.Length - 1
If strSplit(x) = "Username: " Then 'Yes there is meant to be a space at the end
SendData("aaron" & Chr(13))
End If
Next
End Sub
Now when I run my app it captures the 'Username: ' part and now sends the data like it should of in the first place.
However, now I am forced with another issue..
When I view the log it seems to Log the reply on separate lines where it should be all on one line. (The device I am connected to will reply back the username I send and should be all one message.)
Is there something I am doing wrong to why it's splitting up the incoming data into separate messages or is it the SSLSocket Library I am using (Is there a new version available - I am using version 1.10 of the SSLSocket Library)?
I know that device I am connecting to is sending the data out correctly as I am able to use a software package that connects in the same way and is working fine with this same device.
Anyone got any ideas ?