unity3d
सर्वर के साथ संचार
खोज…
प्राप्त
वेब सर्वर से डेटा प्राप्त कर रहा है। और new WWW("https://urlexample.com");
एक यूआरएल के साथ लेकिन एक दूसरे पैरामीटर के बिना एक गेट कर रहा है।
अर्थात
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");
}
}
पोस्ट (एक फ़ाइल अपलोड करें)
सर्वर पर फाइल अपलोड करना भी एक पोस्ट है। आप डब्ल्यूडब्ल्यूडब्ल्यू के माध्यम से आसानी से एक फ़ाइल अपलोड कर सकते हैं, नीचे की तरह:
सर्वर पर एक ज़िप फ़ाइल अपलोड करें
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!");
}
इस उदाहरण में, यह फ़ाइल तैयार करने और अपलोड करने के लिए कोरटाइन का उपयोग करता है, यदि आप यूनिटी कोरआउट्स के बारे में अधिक जानना चाहते हैं, तो कृपया कोरआउट्स पर जाएं।
सर्वर के लिए एक अनुरोध भेजा जा रहा है
क्लाइंट के रूप में एकता का उपयोग करने वाले सर्वरों के साथ संवाद करने के कई तरीके हैं (कुछ कार्यप्रणाली आपके उद्देश्य के आधार पर दूसरों की तुलना में बेहतर हैं)। सबसे पहले, एक को सर्वर की आवश्यकता को निर्धारित करना चाहिए कि वह प्रभावी रूप से सर्वर से और उसके लिए संचालन भेजने में सक्षम हो। इस उदाहरण के लिए, हम अपने सर्वर के कुछ डेटा को मान्य करने के लिए भेजेंगे।
सबसे अधिक संभावना है, प्रोग्रामर को घटनाओं को प्राप्त करने और तदनुसार क्लाइंट को प्रतिक्रिया देने के लिए अपने सर्वर पर किसी प्रकार के हैंडलर को सेटअप करना होगा - हालांकि जो इस उदाहरण के दायरे से बाहर है।
सी#:
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 (वैकल्पिक) स्ट्रिंग मापदंडों में लेता है:
- उस सर्वर का यूआरएल, जिसके साथ हम संवाद कर रहे हैं
- डेटा का पहला टुकड़ा
- डेटा का दूसरा टुकड़ा जो हम सर्वर को भेज रहे हैं
उपयोगकर्ता नाम और पासवर्ड वैकल्पिक डेटा है जो मैं सर्वर को भेज रहा हूं। इस उदाहरण के लिए हम इसे तब उपयोग कर रहे हैं जब डेटाबेस या किसी अन्य बाह्य संग्रहण से इसे और मान्य किया जाता है।
अब जब हमने अपनी संरचना तैयार कर ली है, तो हम वास्तव में अपना डेटा भेजने के लिए उपयोग किए जाने वाले एक नए WebClient को तुरंत बदल देंगे। अब हमें अपना डेटा हमारे NameValueCollection में लोड करना होगा और सर्वर पर डेटा अपलोड करना होगा।
UploadValues फ़ंक्शन 3 आवश्यक मापदंडों में भी लेता है:
- सर्वर का आईपी पता
- HTTP विधि
- आपके द्वारा भेजा जा रहा डेटा (हमारे मामले में उपयोगकर्ता नाम और पासवर्ड)
यह फ़ंक्शन सर्वर से प्रतिक्रिया का एक बाइट सरणी देता है। हमें वापसी बाइट सरणी को एनकोड करने की जरूरत है ताकि वास्तविक रूप से प्रतिक्रिया में हेरफेर और विच्छेद करने में सक्षम हो।
कुछ इस तरह कर सकता है:
if(opResponse.Equals(ReturnMessage.Success))
{
Debug.Log("Unity client has successfully sent and validated data on server.");
}
अब आप अभी भी भ्रमित हो सकते हैं, इसलिए मुझे लगता है कि मैं एक प्रतिक्रियाशील सर्वर साइड को कैसे संभालना है, इसका संक्षिप्त विवरण दूंगा।
इस उदाहरण के लिए मैं क्लाइंट से प्रतिक्रिया को संभालने के लिए PHP का उपयोग करूंगा। मैं PHP को आपकी बैक-एंड स्क्रिप्टिंग भाषा के रूप में उपयोग करने की सलाह दूंगा क्योंकि यह सुपर बहुमुखी है, उपयोग करने में आसान है और सभी तेजी से अधिकांश। एक सर्वर पर एक प्रतिक्रिया को संभालने के लिए निश्चित रूप से अन्य तरीके हैं लेकिन मेरी राय में 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";
}
तो यह सबसे महत्वपूर्ण हिस्सा है - 'गूंज'। जब हमारा क्लाइंट सर्वर पर डेटा अपलोड करता है, तो क्लाइंट उस बाइट ऐरे में रिस्पॉन्स (या रिसोर्स) सेव करता है। जब ग्राहक की प्रतिक्रिया हो जाती है, तो आप जानते हैं कि डेटा मान्य हो गया है और उस घटना के हो जाने के बाद आप क्लाइंट में आगे बढ़ सकते हैं। आपको यह भी सोचने की ज़रूरत है कि आप किस प्रकार का डेटा भेज रहे हैं (एक हद तक), और वास्तव में आप जो राशि भेज रहे हैं उसे कैसे कम से कम करें।
तो यह एकता से डेटा भेजने / प्राप्त करने का केवल एक तरीका है - कुछ अन्य तरीके हैं जो आपके प्रोजेक्ट के आधार पर आपके लिए अधिक प्रभावी हो सकते हैं।