向服务器发送请求

有很多方法可以使用 Unity 作为客户端与服务器进行通信(根据你的目的,某些方法比其他方法更好)。首先,必须确定服务器能够有效地向服务器发送操作和从服务器发送操作的需要。对于此示例,我们将向我们的服务器发送一些数据以进行验证。

最有可能的是,程序员将在其服务器上设置某种处理程序来接收事件并相应地响应客户端 - 但这超出了本示例的范围。

C#:

using System.Net;
using System.Text;

public class TestCommunicationWithServer
{
    public string SendDataToServer(string url, string username, string password)
    {
        WebClient client = new WebClient();

        // This specialized key-value pair will store the form data we're sending to the server
        var loginData = new System.Collections.Specialized.NameValueCollection();
        loginData.Add("Username", username);
        loginData.Add("Password", password);

        // Upload client data and receive a response
        byte[] opBytes = client.UploadValues(ServerIpAddress, "POST", loginData);
    
        // Encode the response bytes into a proper string
        string opResponse = Encoding.UTF8.GetString(opBytes);

        return opResponse;
    }

首先要做的是抛弃使用允许我们使用 WebClient 和 NameValueCollection 类的 using 语句。

对于此示例,SendDataToServer 函数接受 3 个(可选)字符串参数:

  1. 我们正在与之通信的服务器的 URL
  2. 第一条数据
  3. 我们发送给服务器的第二条数据

用户名和密码是我发送给服务器的可选数据。对于此示例,我们使用它然后从数据库或任何其他外部存储进一步验证。

现在我们已经设置了我们的结构,我们将实例化一个新的 WebClient 用于实际发送我们的数据。现在我们需要将数据加载到 NameValueCollection 中并将数据上传到服务器。

UploadValues 函数也包含 3 个必要参数:

  1. 服务器的 IP 地址
  2. HTTP 方法
  3. 你要发送的数据(我们的用户名和密码)

此函数返回来自服务器的响应的字节数组。我们需要将返回的字节数组编码为适当的字符串,以便能够操作和剖析响应。

人们可以这样做:

if(opResponse.Equals(ReturnMessage.Success))
{
    Debug.Log("Unity client has successfully sent and validated data on server.");
}

现在你可能仍然感到困惑,所以我想我将简要解释如何处理响应服务器端。

对于此示例,我将使用 PHP 来处理来自客户端的响应。我建议使用 PHP 作为你的后端脚本语言,因为它超级通用,易于使用,而且最重要的是快速。肯定有其他方法可以处理服务器上的响应,但在我看来,PHP 是迄今为止 Unity 中最简单,最简单的实现。

PHP:

// Check to see if the unity client send the form data
if(!isset($_REQUEST['Username']) || !isset($_REQUEST['Password']))
{
    echo "Empty";
}
else
{ 
    // Unity sent us the data - its here so do whatever you want 
  
    echo "Success";
   
}

所以这是最重要的部分 - ‘回声’。当我们的客户端将数据上传到服务器时,客户端将响应(或资源)保存到该字节数组中。一旦客户端获得响应,你就知道数据已经过验证,并且一旦发生该事件,你就可以继续在客户端中继续。你还需要考虑要发送的数据类型(在某种程度上),以及如何最小化实际发送的数量。

因此,这只是从 Unity 发送/接收数据的一种方式 - 根据你的项目,还有其他一些方法可能对你更有效。