unity3d
Связь с сервером
Поиск…
Получить
Get получает данные с веб-сервера. и new WWW("https://urlexample.com");
с url, но без второго параметра делает Get .
т.е.
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public string url = "http://google.com";
IEnumerator Start()
{
WWW www = new WWW(url); // One get.
yield return www;
Debug.Log(www.text); // The data of the url.
}
}
Простая почта (почтовые поля)
Каждый экземпляр WWW со вторым параметром - это сообщение .
Ниже приведен пример отправки идентификатора пользователя и пароля на сервер.
void Login(string id, string pwd)
{
WWWForm dataParameters = new WWWForm(); // Create a new form.
dataParameters.AddField("username", id);
dataParameters.AddField("password", pwd); // Add fields.
WWW www = new WWW(url+"/account/login",dataParameters);
StartCoroutine("PostdataEnumerator", www);
}
IEnumerator PostdataEnumerator(WWW www)
{
yield return www;
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
}
else
{
Debug.Log("Data Submitted");
}
}
Сообщение (Загрузить файл)
Загрузка файла на сервер - это также сообщение. Вы можете легко загрузить файл через WWW , как показано ниже:
Загрузка Zip-файла на сервер
string mainUrl = "http://server/upload/";
string saveLocation;
void Start()
{
saveLocation = "ftp:///home/xxx/x.zip"; // The file path.
StartCoroutine(PrepareFile());
}
// Prepare The File.
IEnumerator PrepareFile()
{
Debug.Log("saveLoacation = " + saveLocation);
// Read the zip file.
WWW loadTheZip = new WWW(saveLocation);
yield return loadTheZip;
PrepareStepTwo(loadTheZip);
}
void PrepareStepTwo(WWW post)
{
StartCoroutine(UploadTheZip(post));
}
// Upload.
IEnumerator UploadTheZip(WWW post)
{
// Create a form.
WWWForm form = new WWWForm();
// Add the file.
form.AddBinaryData("myTestFile.zip",post.bytes,"myFile.zip","application/zip");
// Send POST request.
string url = mainUrl;
WWW POSTZIP = new WWW(url,form);
Debug.Log("Sending zip...");
yield return POSTZIP;
Debug.Log("Zip sent!");
}
В этом примере он использует сопрограмму для подготовки и загрузки файла, если вы хотите узнать больше о сопрограмме Unity, посетите Coroutines .
Отправка запроса на сервер
Существует множество способов общения с серверами, использующими 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.
В этом примере функция SendDataToServer принимает 3 (необязательных) строковых параметра:
- Url сервера, с которым мы общаемся
- Первая часть данных
- Вторая часть данных, которые мы отправляем на сервер
Имя пользователя и пароль - это дополнительные данные, которые я отправляю на сервер. В этом примере мы используем его для дальнейшей проверки из базы данных или любого другого внешнего хранилища.
Теперь, когда мы настроили нашу структуру, мы создадим новый WebClient, который будет использоваться для фактической отправки наших данных. Теперь нам нужно загрузить наши данные в наш NameValueCollection и загрузить данные на сервер.
Функция UploadValues также принимает 3 необходимых параметра:
- IP-адрес сервера
- Метод HTTP
- Данные, которые вы отправляете (имя пользователя и пароль в нашем случае)
Эта функция возвращает массив байтов ответа от сервера. Нам нужно закодировать возвращаемый массив байтов в правильную строку, чтобы фактический мог манипулировать и анализировать ответ.
Можно было бы сделать что-то вроде этого:
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 - есть другие способы, которые могут быть более эффективными для вас в зависимости от вашего проекта.