通过Socket从c#到Android.找不到我的错误

本文关键字:找不到 我的 错误 Android Socket 通过 | 更新日期: 2023-09-27 18:15:35

问题-我不能得到这个功能的工作。我在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.");
            }
        }
    }
}

通过Socket从c#到Android.找不到我的错误

您的Java代码一次读取一行,但您从未从c#发送行结束符。

您可以手动添加一个到myMsg,或者您可以在StreamWriter上使用sw.WriteLine()方法(否则似乎不会使用)。在调用sw.WriteLine()之后,您可能必须调用sw.Flush()