1

私は現在、個人的なプロジェクト用の小さなサーバー/クライアント アプリケーションを開発しています。サーバーは、クライアントが Windows PC から実行されている間に、Mono の下で Linux で実行されることを意図しています。

サーバーにデータを渡すという問題があります (この場合は "on" と "off" の文字列値) が、if ステートメントは常に false 値を返します。

サーバーからのコードは次のとおりです

public void startServer() {
    TcpListener listen = new TcpListener(serverIP, 10000);
    listen.Start();

    Console.Clear();
    Console.WriteLine("IP Address = {0}", serverIP.ToString());
    Console.WriteLine("Server is listening for connection");

    Socket a = listen.AcceptSocket();

    Console.WriteLine("Connection from {0}", a.RemoteEndPoint);

    ASCIIEncoding respond = new ASCIIEncoding();
    a.Send(respond.GetBytes("You are connected to LED Control Server"));

    bool keepListening = true;

    while (keepListening) {
        byte[] b = new byte[1000];
        a.Receive(b);
        Console.WriteLine("Message Received from {0}, string: {1}", a.RemoteEndPoint, recData(b));
        string serverMsg = procIns(recData(b));
        a.Send(respond.GetBytes(serverMsg));
    }
}

private string recData(byte[] b) //receiving data from the client {
    int count = b.Length;
    string message = "";
    for (int a = 0; a < count; a++) {
        message += Convert.ToChar(b[a]);
    }
    return message;
}

private string procIns(string instruction) {
    string returnMsg;

    Console.WriteLine(instruction.ToLower());

    if (instruction.ToLower() == "on") {
        FileGPIO gpio = new FileGPIO();
        gpio.OutputPin(FileGPIO.enumPIN.gpio17, true);
        returnMsg = "GPIO 17 1";
    } else if (instruction.ToLower() == "off") {
        FileGPIO gpio = new FileGPIO();
        gpio.OutputPin(FileGPIO.enumPIN.gpio17, false);
        returnMsg = "GPIO 17 0";
    } else {
        returnMsg = "Invalid Command";
    }

    return returnMsg;
}

false を返す procIns メソッドの if ステートメントの原因は、私を逃れていることです。誰かアドバイスをいただければ幸いです。

4

2 に答える 2

1

私はそれが埋められたスペースでなければならないと思います。代わりにこれを試してください...

if (instruction.Trim().ToLower() == "on")
于 2012-10-14T17:48:23.880 に答える
0
   while (keepListening) {
            byte[] b = new byte[1000];
            int bytesRcvd = a.Receive(b);
            Console.WriteLine("Message Received from {0}, string: {1}", a.RemoteEndPoint, recData(b));
            string serverMsg = procIns(recData(b, bytesRcvd ));
            a.Send(respond.GetBytes(serverMsg));
        }

a.Receive(b)メソッドは、受信したバイト数を返します。値を変数に格納し、その変数をrecDataメソッドに渡すことができます。

    private string recData(byte[] b, int bytesRcvd) {
    string message = "";
    for (int a = 0; a < bytesRcvd; a++) {
        message += Convert.ToChar(b[a]);
    }
    return message;
}

受信したバイト数は、バイト配列の余分な値を切り捨てるのに役立ちます。

于 2012-10-14T18:11:30.667 に答える