C# 使用C和PHP从远程服务器获取回复

C# 使用C和PHP从远程服务器获取回复,c#,php,unity3d,C#,Php,Unity3d,我正在尝试使用C从远程服务器获取数据。我尝试使用一个简单的脚本来查看它是否有效,但没有得到响应。同样的脚本在本地服务器上工作,所以我想知道如何才能做到这一点 这是我的C代码: IEnumerator Sayhi() { WWWForm sendInfo = new WWWForm(); sendInfo.AddField("function", function); WWW www = new WWW(bl_LoginDataBase.Instance.GetUrl(b

我正在尝试使用C从远程服务器获取数据。我尝试使用一个简单的脚本来查看它是否有效,但没有得到响应。同样的脚本在本地服务器上工作,所以我想知道如何才能做到这一点

这是我的C代码:

IEnumerator Sayhi()
{
    WWWForm sendInfo = new WWWForm();
    sendInfo.AddField("function", function);

    WWW www = new WWW(bl_LoginDataBase.Instance.GetUrl(bl_LoginDataBase.URLType.CallFunction), sendInfo);
    yield return www;
    Debug.Log(www.text);
}
以及PHP代码:

<?php
echo "Hi";
我期望Debug.Logwww.text;打印Hi,如果我使用本地机器,它会打印Hihttp://192.168.0.whatever,但远程服务器http://whatever.example.com 不返回任何内容。我试图让php失败,因此它返回一个错误,创建一个数据库并从中返回一些值,但什么也没有。我想指出的是,它在本地服务器上确实可以工作,并且按照预期工作

我做错了什么


编辑:顺便说一下,如果我访问http://www.whatever.example.com/Function.php 通过浏览器,它显示回显结果。

C内置了类和方法来帮助您执行此类任务。您可以使用WebClient类使用GET或POST连接到web服务器,甚至可以轻松地向其发送表单值。见下文:

string url ="http://www.whatever.example.com/Function.php";

var reqparam = new System.Collections.Specialized.NameValueCollection();

reqparam.Add("name", "John Doe");

try
{
    using (System.Net.WebClient client = new System.Net.WebClient())
    {

     byte[] responsebytes = client.UploadValues(url, "POST", parameters);

     string output = System.Text.Encoding.UTF8.GetString(responsebytes);

     }
}
catch (Exception x)
{
   //an error occured
}

变量输出将包含您想要的响应。

我不知道WWWForm类型是什么,但希望它能为您提供http状态返回代码。它是什么?以及该代码的可枚举性是什么?@Crowcoder它不返回任何http状态返回代码。顺便说一句,我用Unity来管理它。它将是可枚举的,但这与问题无关。它很可能是调用WWWForm的常规函数。您的浏览器将执行GET请求,但看起来您正在用代码编写POST请求,但我不能确定,因为我不熟悉该库。@Crowcoder Unity中就是这样做的。IEnumerator是因为它是一个协同程序。但是,您是正确的,通过传递WWWForm,OP实际上是在执行POST而不是GET。不过,不确定这是否会对PHP产生影响。这将导致阻塞,而Unity WWWForm则不会。它的设计显然是为了防止游戏在后台请求时停止,这是有道理的。我不熟悉unity,但是这个代码会阻止当前线程。您可以改用client.UploadStringAsync方法,这不会阻止当前UI。