Golangサーバ、Unityクライアント通信


2016.6.10孫広東
http://golangtc.com/download
エディタには次のものがあります.
1、 liteIDE
2、Sublime Text 2
3、Google Go language IDE built using the IntelliJ Platform
  Golang服务器,Unity客户端 通信_第1张图片
これは手動で構成する必要があります!
 
 
次に、3つの通信例について説明します.
一、UnityクライアントはGolangサーバーと通信する
サーバ実行結果
Golang服务器,Unity客户端 通信_第2张图片
Unityクライアント実行結果
Golang服务器,Unity客户端 通信_第3张图片
 
プログラムコード:
//---------------------------------------------Unity C#クライアント
using UnityEngine;
using System.Collections;
using System.Net.Sockets;
using System.IO;

public class Server1 : MonoBehaviour
{
    readonly string _ip = "127.0.0.1"; //         IP
    readonly int _port = 1024;

    void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10, 100, 100), "Send Public IP"))
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(_ip, _port);
            NetworkStream stream = new NetworkStream(socket);
            StreamWriter sw = new StreamWriter(stream);
            StreamReader sr = new StreamReader(stream);

            sw.WriteLine("     ,     。");
            sw.Flush();

            string st = sr.ReadLine();
            print(st);

            sw.Close();
            stream.Close();
            socket.Close();
        }
    }
}

//---------------------------------------------------Golang,Go言語サーバー
package main

import (
    "bufio"
    "net"
)

func main() {

    listener, _ := net.Listen("tcp", ":1024")
    println("     ...")

    for {
        conn, _ := listener.Accept() //          
        go ClientLogic(conn)
    }
}

func ClientLogic(conn net.Conn) {

    //         
    s, _ := bufio.NewReader(conn).ReadString('
')     println(" :", s)     //     conn.Write([]byte("
"))     //     conn.Close() }

 
二、画像をサーバー(バックエンド)にアップロードし、サーバーはGolangを使用する
実行結果、ここにコンテンツを追加しました!
Golang服务器,Unity客户端 通信_第4张图片
using UnityEngine;
using System.Collections;

public class Server2 : MonoBehaviour
{
    //      ,       Advanced           (     )
    public Texture2D t; 

    IEnumerator Start()
    {
        WWWForm wwwF = new WWWForm();
        wwwF.AddBinaryData("file", t.EncodeToPNG(), "A.png");
        WWW www = new WWW("http://127.0.0.1:8080/upload", wwwF);
        yield return www;
        print("Upload Finish !!");
    }
}

 
//     Golang Web    
package main
import (
    "io/ioutil"
    "net/http"
    "os"
)
func uploadHandle(w http.ResponseWriter, r *http.Request) {

    file, head, _ := r.FormFile("file")
    defer file.Close()
    bytes, _ := ioutil.ReadAll(file)
    ioutil.WriteFile(head.Filename, bytes, os.ModeAppend)
}
func main() {
    http.HandleFunc("/upload", uploadHandle)
    http.ListenAndServe(":8080", nil)
}

 
三、パラメータをGolang Webサーバーに伝え、Unityにメッセージを返す
実行結果:
Golang Server  code

package main
import (
    "fmt"
    "net/http"
)

func loadin(w http.ResponseWriter, r *http.Request) {
    username := r.FormValue("username")
    password := r.FormValue("password")
    fmt.Fprintf(w, "<html><body>")
    fmt.Fprintf(w, "Hello, %s ! <br/>", username)
    fmt.Fprintf(w, "Your password is : %s!", password)
    fmt.Fprintf(w, "</body></html>")
}

func main() {
    http.HandleFunc("/loadin", loadin)
    http.ListenAndServe(":8080", nil)
}

 
Unity C# code

using UnityEngine;
using System.Collections;

public class Server3 : MonoBehaviour
{

    IEnumerator Start()
    {
        WWWForm wwwF = new WWWForm();
        wwwF.AddField("username", "Loli");
        wwwF.AddField("password", "Kitty");
        WWW www = new WWW("http://127.0.0.1:8080/loadin", wwwF);
        yield return www;
        print(www.text);
    }
}