0

Android (Basic4Android) を使用して、.net TCP サーバーを実行している PC と通信しようとすると問題が発生します。サーバーに 4 バイトのコマンドを送信し、応答を受信するボタンが必要です。Androidでプログラムを実行すると、サーバーは接続して文字列「INFO」を受信しますが、プログラムを再起動するまで何も送受信せず、コマンド「INFO」のみを再度送信します。ボタンを押してコマンドを送信してもエラーは発生しませんが、サーバーは何も受信しません。サーバーは、VB.NET で記述された Windows 形式のマルチスレッド プログラムです。私がやろうとしていることの例として添付できる動作する 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
4

3 に答える 3

0

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();
  }
}
于 2012-04-03T00:49:10.980 に答える
0

サーバー側でデータをどのように読み取っていますか? TextWriter.WriteLine は、chr(10) で終了する行を書き込むことに注意してください。chr(13) と chr(10) を待っていないことを確認してください。

于 2011-11-05T09:22:24.697 に答える
0

私はリスナーによって呼び出されたスレッドでnetworkStream.readandを使用しています。networkStream.writevb.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
于 2011-11-06T06:10:24.333 に答える