수색…


도망

웹 서버에서 데이터를 가져 오는 중입니다. 및 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의 모든 인스턴스는 게시물 입니다.

다음은 사용자 ID암호 를 서버에 게시하는 예제입니다.

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

이 예에서는 coroutine 을 사용하여 파일을 준비하고 업로드합니다. Unity coroutines에 대해 더 알고 싶다면 Coroutines 를 방문하십시오.

서버에 요청 보내기

Unity를 클라이언트로 사용하는 서버와 통신하는 방법에는 여러 가지가 있습니다 (목적에 따라 일부 방법이 다른 방법보다 낫습니다). 먼저 서버와 서버간에 작업을 효율적으로 보낼 수있는 서버의 필요성을 결정해야합니다. 이 예에서는 검증을 위해 몇 가지 데이터를 서버에 보냅니다.

대부분 프로그래머는 이벤트를 수신하고 그에 따라 클라이언트에 응답하기 위해 서버에 처리기를 설치해야합니다. 그러나이 예제의 범위를 벗어납니다.

기음#:

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에서 데이터를 보내거나받는 유일한 방법 일뿐입니다. 프로젝트에 따라 좀 더 효과적 일 수있는 몇 가지 다른 방법이 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow