Golangサーバ、Unityクライアント通信
6366 ワード
2016.6.10孫広東
http://golangtc.com/download
エディタには次のものがあります.
1、 liteIDE
2、Sublime Text 2
3、Google Go language IDE built using the IntelliJ Platform
これは手動で構成する必要があります!
次に、3つの通信例について説明します.
一、UnityクライアントはGolangサーバーと通信する
サーバ実行結果
Unityクライアント実行結果
プログラムコード:
//---------------------------------------------Unity C#クライアント
//---------------------------------------------------Golang,Go言語サーバー
二、画像をサーバー(バックエンド)にアップロードし、サーバーはGolangを使用する
実行結果、ここにコンテンツを追加しました!
三、パラメータをGolang Webサーバーに伝え、Unityにメッセージを返す
実行結果:
http://golangtc.com/download
エディタには次のものがあります.
1、 liteIDE
2、Sublime Text 2
3、Google Go language IDE built using the IntelliJ Platform
これは手動で構成する必要があります!
次に、3つの通信例について説明します.
一、UnityクライアントはGolangサーバーと通信する
サーバ実行結果
Unityクライアント実行結果
プログラムコード:
//---------------------------------------------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を使用する
実行結果、ここにコンテンツを追加しました!
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);
}
}