簡體   English   中英

通過Socket從C#到Android。 找不到我的錯誤

[英]From C# to Android via Socket. Can't find my mistake

問題-我無法使此功能正常工作。 我在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.");
            }
        }
    }
}

您的Java代碼一次讀取一行,但是您從未從C#發送行終止符。

您可以手動將其附加到myMsg ,也可以在StreamWriter上使用sw.WriteLine()方法(否則該方法似乎沒有使用)。 調用sw.WriteLine()您可能必須調用sw.Flush()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM