0

以下は正常に動作する私のphpコードです:

<?php

//This script checks the id and code of the already registered user from the database. If correct it returns the other details otherwise the respective error

//starting session
session_start();

//catching data from client
$id=$_POST['id'];
$code=$_POST['code'];

if($id&&$code)//checking if the data is not empty
{
    //Connecting to server
    ($connect=mysqli_connect('localhost','root','','ohhell')) or exit("Connection Failed");

    //Selecting user for given id
    $result=mysqli_query($connect,"SELECT * FROM users WHERE id='$id'");

    //Counting number of rows
    $numrows=mysqli_num_rows($result);

    if($numrows!=0)
    {
        //Creating associative array
        $row=mysqli_fetch_assoc($result);

        //freeing result set
        mysqli_free_result($result);

        //fetching code from database
        $db_code=$row['code'];
        $code=md5($code);

        //checking if the codes match
        if($code==$db_code)
        {
            //change status
            mysqli_query($connect,"UPDATE users SET status='yellow' WHERE id='$id'");

            $_SESSION['id']=$row['id'];
            $_SESSION['name']=$row['name'];
            $_SESSION['location']=$row['location'];

            $name=$row['name'];
            $location=$row['location'];

            //closing connection
            mysqli_close($connect);

            //returning values to client
            exit("$name\n$location");//Successful Login. Client can now create an object and switch the screen
        }
        else
        {
            exit("Invalid Player Code");//Unsuccessful Login
        }
    }
    else
        exit("Invalid Player ID");//Unsuccessful Login
}
else
    exit("Incomplete Details");//Unsuccessful Login     

?>

それぞれのエラー メッセージまたはプレーヤーの対応する詳細を c# クライアントに返します。以下は、データを受信するためのクライアント側のコードです。

WebRequest request = WebRequest.Create(URL);
Stream dataStream;
WebResponse response;
StreamReader reader;

response = request.GetResponse();
dataStream = response.GetResponseStream();
reader = new StreamReader(dataStream);
responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();

データを正常に受信した後、C# クライアントは "\n" を使用して両方のデータを分離し、クラスのオブジェクトを作成して、受信したデータをそのクラスのそれぞれのデータ メンバーに入力します。

ここで問題が発生します。現在テストしているため、すべてが正常に機能しています。しかし、私の質問は、読み取られるデータが文字列の形式になるため、クライアント側でデータが実際に正常に受信され、取得された文字列に実際にデータが含まれていることを確認するにはどうすればよいかということです。エラーメッセージ。

つまり、php への接続中に内部エラーが発生した場合、またはその他のネットワーク エラーが対応するエラーを返し、それも文字列の形式で返された場合、クライアント アプリがデータの分離を開始する必要があるかどうかをどのように区別するかを考えます。オブジェクトを作成する文字列、またはエラーで終了する必要があります。PHP に含めたエラーについては、C# クライアントでそれぞれの if() 条件を使用できますが、エラーが PHP スクリプトで考慮されるエラーに限定されるとは限らないため、これは適切な方法ではありません。返される可能性のあるエラーが多数ある可能性があるため、この場合、エラーと実際のデータを実際に区別するにはどのようなアプローチを取る必要がありますか。

考えられるアプローチは、データを送信する前に "1" という信号をデータの先頭に追加し、受信した文字列が "1" で始まるかどうかをクライアント側でテストすることです。はいの場合は、対応するエラーメッセージを表示する分離に進みます。ただし、エラー自体が 1 で始まる場合は失敗するため、このアプローチも最適ではありません。

では、php スクリプトを介して最適な方法でデータを C# に送信するには、実際に何をすべきでしょうか?

説明が長くなってすみません!助けを待っています!!!

100万兆兆に感謝... :)

4

3 に答える 3

2

HTTP ステータス コードを使用して、天気やエラーが発生していないかどうかを判断できます。上記のphpスクリプトの実行中にエラーが発生した場合、つまりhttp_response_codeを使用して、phpでそれぞれのHTTPヘッダーを設定できます。Startus コードに問題がなければ、(コメントで述べたように、jsonを使用して) 応答を解析し、結果を取得できます。ネットワーク通信でエラーが発生した場合は、クライアントでそれぞれのエラーを生成します。PHP でエラーが発生した場合は、応答も解析してエラーを取得し、それによってエラー メッセージを取得します。

PHP での簡単な例

$response = array();
$responseCode = null;
try {
  // some code is executed
  $responseCode = 200;
}
catch (Exception $e) {
  // an error occured and we have to add it to our response
  $response['error'] = array('errorcode' => $e->getCode(), 'error' => $e->getMessage());
  $responseCode = 500;
}

http_response_code($responseCode);
echo(json_encode($response ));

C# で、ヘッダーを確認するだけです。500 の場合 (エラーが発生したことを意味します)、結果を json_decode してエラーを取得します。200 ( OK を意味する) の場合、結果を json_encode します。それ以外の場合は、リンクの HTTP エラー コード リストに従って対応してください。

于 2014-03-12T09:18:05.330 に答える
2

http ステータス コードを使用して、エラー状態を示すことができます。200 OK現在、(デフォルトで)のみを使用しているようですが、たとえばorInvalid Player Codeになる可能性があります(それがある種の承認を意図している場合)。401 Unauthorized403 Forbidden

C# 側では、HttpWebResponse.StatusCode プロパティを介してそのステータス コードを取得します。

于 2014-03-12T09:18:44.873 に答える
1

Vikas Prasad のコメント質問を参照します。どっちがいい?」

JSON または XMLは、データを転送する方法と後で読み取る方法にすぎません。JSON または XML を使用するには、php と c# が必要です。私はJSON を好みますが、C# でうまく機能するかどうかはわかりません。テストしたことはありません。

ここでは、C# 用の JSON API を見つけることができます。

ただし、最初に PHP サーバーに JSON を追加する必要があります。PHP では、JSON は非常に使いやすくjson_encodeおよびjson_decode関数があります。あなたの場合、必要なのはjson_encode関数だけです。サーバー側では、クライアント用の JSON を生成したいだけだからです。json_encodeの使用方法は、Google と PHP のドキュメントで十分にサポートされていますが、質問がある場合はコメントで質問してください。

以下に少し例を示します。

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);
?>
于 2014-03-12T09:30:23.740 に答える