以下は正常に動作する私の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万兆兆に感謝... :)