#android #.net #visual-studio-2010 #basic4android
#Android #.net #visual-studio-2010 #basic4android
Вопрос:
У меня возникли проблемы при попытке использовать мой Android (Basic4Android) для связи с моим компьютером, на котором запущен сервер .net TCP. Мне нужно иметь кнопки, которые отправляют 4-байтовые команды на сервер и получают ответ. Когда я запускаю программу на Android, сервер подключается и получает строку «INFO», но затем больше ничего не отправляет и не получает, пока я не перезапущу программу, и она снова отправляет команду «INFO». Я не получаю никаких ошибок при нажатии кнопок для отправки команд, но сервер никогда ничего не получает. Сервер представляет собой многопоточную программу Windows form, написанную на VB.NET . Я написал VB.NET клиентская программа, которая работает, которую я могу прикрепить в качестве примера того, что я пытаюсь сделать. Это моя первая попытка создания приложения для Android, и пока я просто модифицирую сетевые примеры, которые я нашел в руководствах.
Код приведен ниже… Спасибо
Sub Process_Globals
Dim Socket1 As Socket
End Sub
Sub Globals
Dim Button_ARM As Button
Dim Button_STAY As Button
Dim Button_AUTO As Button
Dim Button_OFF As Button
Dim Label_Received As Label
Dim Label_Sent As Label
Dim tr As TextReader
Dim tw As TextWriter
Dim sb As StringBuilder
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Alarm_Control")
Socket1.Initialize("Socket1")
Socket1.Connect("#.#.#.#" , 8000, 20000) 'My IP address goes here
End Sub
Sub Socket1_Connected (Successful As Boolean)
If Successful = False Then
Msgbox(LastException.Message, "Error connecting")
Return
End If
tr.Initialize(Socket1.InputStream)
tw.Initialize(Socket1.OutputStream)
tw.WriteLine("INFO")
Label_Sent.Text = "Sent INFO"
tw.Flush
sb.Initialize
sb.Append(tr.ReadLine)
Label_Received.Text = sb.ToString
'Socket1.Close
End Sub
Sub Button_ARM_Click
tw.WriteLine("O001")
tw.Flush
Label_Sent.Text = "Sent O001"
End Sub
Sub Button_STAY_Click
tw.WriteLine("O002")
tw.Flush
Label_Sent.Text = "Sent O002"
End Sub
Sub Button_OFF_Click
tw.WriteLine("O000")
tw.Flush
Label_Sent.Text = "Sent O000"
End Sub
Ответ №1:
Как вы считываете данные на стороне сервера? Обратите внимание, что TextWriter.WriteLine записывает строку, завершающуюся символом chr(10). Убедитесь, что вы не ожидаете chr (13) и chr (10).
Ответ №2:
Я использую networkStream.read
и networkStream.write
в потоке, вызываемом listner. The vb.net клиентская программа корректно работает с vb.net сервер.
Public Sub handlerThread()
Dim handlerSocket As Socket
handlerSocket = alSockets(alSockets.Count - 1)
Dim networkStream As NetworkStream = New NetworkStream(handlerSocket)
Dim bytes(4) As Byte
networkStream.Read(bytes, 0, CInt(4)) ' Read the stream into 4-byte array
Dim clientdata As String = Encoding.ASCII.GetString(bytes)
Label_Received.Text = clientdata
Dim responseString As String = "Received " clientdata
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
networkStream.Write(sendBytes, 0, sendBytes.Length)
Label_Sent.Text = responseString
handlerSocket = Nothing
End Sub
Ответ №3:
Chr (10), похоже, здесь не проблема. У меня такая же проблема с использованием этого кода сервера Java:
import java.io.*;
import java.net.*;
public class ec192 {
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
echoSocket = new Socket("192.168.0.45", 2222);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: taranis.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
"the connection to: 2222 taranis.");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " in.readLine());
}
out.close();
in.close();
stdIn.close();
echoSocket.close();
}
}
Комментарии:
1. Возможно, это было бы лучше как комментарий к исходному вопросу, а не как ответ — на самом деле это не попытка ответить на вопрос.