Szukaj…


Otrzymać

Get pobiera dane z serwera WWW. oraz new WWW("https://urlexample.com"); z adresem URL, ale bez drugiego parametru robi Get .

to znaczy

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.
    }
}

Prosty post (pola pocztowe)

Każde wystąpienie WWW z drugim parametrem jest postem .

Oto przykład opublikowania identyfikatora użytkownika i hasła na serwerze.

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");
    }
}

Publikuj (Prześlij plik)

Prześlij plik na serwer to także post. Możesz łatwo przesłać plik przez WWW , jak poniżej:

Prześlij plik zip na serwer

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!");
}

W tym przykładzie używa coroutine do przygotowania i przesłania pliku. Jeśli chcesz dowiedzieć się więcej o coroutines Unity, odwiedź Coroutines .

Wysyłanie żądania do serwera

Istnieje wiele sposobów komunikowania się z serwerami używającymi Unity jako klienta (niektóre metody są lepsze niż inne w zależności od celu). Najpierw należy określić potrzebę serwera, aby móc skutecznie wysyłać operacje do i z serwera. W tym przykładzie wyślemy kilka danych na nasz serwer w celu weryfikacji.

Najprawdopodobniej programista skonfiguruje na swoim serwerze jakiś moduł obsługi, który będzie odbierał zdarzenia i odpowiednio odpowiadał klientowi - nie wchodzi to jednak w zakres tego przykładu.

DO#:

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;
    }

Pierwszą rzeczą, którą należy zrobić, jest podrzucenie instrukcji użycia, które pozwalają nam korzystać z klas WebClient i NameValueCollection.

W tym przykładzie funkcja SendDataToServer przyjmuje 3 (opcjonalne) parametry ciągu:

  1. Adres URL serwera, z którym się komunikujemy
  2. Pierwsza część danych
  3. Drugi kawałek danych wysyłamy na serwer

Nazwa użytkownika i hasło to opcjonalne dane, które wysyłam na serwer. W tym przykładzie używamy go do dalszej weryfikacji z bazy danych lub innego zewnętrznego magazynu.

Teraz, gdy skonfigurowaliśmy naszą strukturę, utworzymy instancję nowego WebClient, który będzie używany do faktycznego wysyłania naszych danych. Teraz musimy załadować nasze dane do naszej NameValueCollection i przesłać dane na serwer.

Funkcja UploadValues przyjmuje również 3 niezbędne parametry:

  1. Adres IP serwera
  2. Metoda HTTP
  3. Przesyłane dane (nazwa użytkownika i hasło w naszym przypadku)

Ta funkcja zwraca tablicę bajtów odpowiedzi z serwera. Musimy zakodować zwróconą tablicę bajtów w odpowiedni ciąg, aby faktycznie móc manipulować i analizować odpowiedź.

Można zrobić coś takiego:

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

Teraz możesz być nadal zdezorientowany, więc chyba krótko wyjaśnię, jak radzić sobie z jednostronnym serwerem odpowiedzi.

W tym przykładzie będę używać PHP do obsługi odpowiedzi od klienta. Polecam używanie PHP jako zaplecza skryptowego, ponieważ jest on bardzo wszechstronny, łatwy w użyciu i przede wszystkim szybki. Zdecydowanie istnieją inne sposoby obsługi odpowiedzi na serwerze, ale moim zdaniem PHP jest zdecydowanie najprostszą i najłatwiejszą implementacją w 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";
   
}

To jest najważniejsza część - „echo”. Gdy nasz klient przesyła dane na serwer, klient zapisuje odpowiedź (lub zasób) w tej tablicy bajtów. Gdy klient otrzyma odpowiedź, wiesz, że dane zostały zweryfikowane i możesz przejść do klienta po tym zdarzeniu. Musisz także pomyśleć o tym, jaki rodzaj danych wysyłasz (do pewnego stopnia) i jak zminimalizować ilość, którą faktycznie wysyłasz.

Jest to więc tylko jeden sposób wysyłania / odbierania danych z Unity - istnieją inne sposoby, które mogą być bardziej skuteczne w zależności od projektu.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow