下面是我的 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# 发送数据呢?
抱歉描述太长了!等待帮助!!!
感谢一百万万亿... :)