C#からAndroid経由でSocketまで。私の間違いを見つけることができません

問題 - 私はこの機能を働かせることができません。 LogCatでソケットがC#サーバに接続されているのがわかりましたが、受信したデータは表示されません。私は間違っているの?

以下は、チェックのためのMessageBoxesを持つC#関数です:

private void receiveConnection(){
        Socket myHandler = null;
        bool isConnected = false;
        while (true)
        {
            if (!isConnected)
            {
                myHandler = wSocket.Accept();
                isConnected = true;
                MessageBox.Show("We have client!");
            }

            if (sendDataToAndroid)
            {  
                try
                {
                    sendDataToAndroid = false;   
                    NetworkStream stream = new NetworkStream(myHandler);
                    StreamWriter sw = new StreamWriter(stream);

                    string myMsg = "";
                    myMsg += temp_F.Length + " ";

                    temp_F[0] = 3.151F;
                    temp_F[1] = 1.415F;
                    temp_F[2] = 5.572F;
                    temp_F[3] = 6.320F;

                    for (int i = 0; i < temp_F.Length; i++)
                    {
                        myMsg += temp_F[i] + " ";
                    }
                    byte[] msg = Encoding.ASCII.GetBytes(myMsg);

                    MessageBox.Show("Data to send: " + myMsg);

                    try
                    {
                        myHandler.Send(msg);
                        MessageBox.Show("Data has been sent!");
                    }
                    catch (Exception e) {
                        MessageBox.Show("Error while sending data!");
                    }
                }

                catch (Exception e)
                {
                    isConnected = false;
                    myHandler.Close();
                    myHandler = null;
                    MessageBox.Show("Error while sending data...");
                }
            }
        } 
    }

そして、ここでは常にデータを受け取ろうとしているAndroidの機能があります:

public class SendThread implements Runnable {
    public void run() 
    {
        Socket socket = null;
        BufferedReader in = null;

        while (true)
        {
           //Loop until connected to server
            while (socket == null){
                try{
                    socket = new Socket ("192.168.137.1", 808);
                }
                catch (Exception e) {
                    socket = null;
                }
            }

           //Get from the server   
            try {
                Log.d("Connection: ", "connected");
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String line = null;


                while ((line = in.readLine()) != null) {
                    Log.d("Socket:", line);

                    NumberFormat nf = new DecimalFormat ("990,0");

                    String[] tokens = line.split(" ");

                    int currTempSize = Integer.parseInt(tokens[0]);
                    currentTemp = new double[currTempSize];

                    for (int i = 0; i < currTempSize; i++)
                        currentTemp[i] = (Double) nf.parse(tokens[i+1]);

                    //Toast.makeText(getApplicationContext(), "Received data:", duration)
                    for (int i = 0; i < currTempSize; i++){
                        Log.d("Converted data: currentTemp["+i+"] = ", currentTemp[i]+"");
                    }
                }
            } 
            catch (Exception e) {
                    socket = null;
                    in = null;
                    Log.d("Connection: ", "lost.");
            }
        }
    }
}
0

1 答え

あなたのJavaコードは一度に行を読み込みますが、C#から行終止符を送信したことはありません。

手動で myMsg に追加することも、 StreamWriter sw.WriteLine()メソッドを使用することもできます使用する)。 sw.WriteLine()を呼び出した後、おそらく sw.Flush()を呼び出す必要があります。

0
追加された
ちょうどあなたの提案を試みました。役に立たなかった:(
追加された 著者 Ok-Alex,