golang 與unity socket 通信

1.golang 代碼:
////////////////////////////


TIM截圖20181005155919.png

package main

import (
"fmt"
"log"
"net"
"sync"
)

func main() {
var waitGroup = new(sync.WaitGroup)
waitGroup.Add(1)
addr := "0.0.0.0:666" //表示監(jiān)聽本地所有ip的8080端口,也可以這樣寫:addr := ":8080"
listener, err := net.Listen("tcp", addr) //使用協(xié)議是tcp,監(jiān)聽的地址是addr
if err != nil {
log.Fatal(err)
}
conn, err := listener.Accept() //用conn接收鏈接
if err!=nil {
return
}
go func() {
defer listener.Close() //關閉監(jiān)聽的端口
for {
buf := make([]byte, 1024)
ln,err_:=conn.Read(buf)
if err_!=nil {
break
}
fmt.Println(string(buf[:ln]))
if err != nil {
log.Fatal(err)
break
}
conn.Write([]byte("huhao\n")) //通過conn的wirte方法將這些數(shù)據(jù)返回給客戶端。
}
waitGroup.Done()

}()
waitGroup.Wait()

}
////////////////////
2.unity 代碼:
![QV@R]UZNQ(MGMP%4~XX9S1O.png](https://upload-images.jianshu.io/upload_images/5395507-b36b60196d306517.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

自己create 一個sense 然后添加UI組件Text,InputField ,Button 就可以進行測試了

using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;

public class login : MonoBehaviour
{
public string ipaddress = "127.0.0.1";
public int port = 666;
private Socket clientSocket;
public InputField MessageInput;
public Text MessageText;
private Thread thread;
private byte[] data = new byte[1024];// 數(shù)據(jù)容器
private string message = "";
public Button btn;

// Use this for initialization
void Start()
{
    ConnectToServer();
    btn.onClick.AddListener(OnSendButtonClick);
    thread = new Thread(ReceiveMessage);
    thread.Start();
}

// Update is called once per frame
void Update()
{
    //只有在主線程才能更新UI     
    if (message != "" && message != null)
    {
        MessageText.text += "\n" + message;
        message = "";
    }
}

/**     
 *連接服務器端函數(shù)   
 **/
void ConnectToServer()
{
    clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);        //跟服務器連接     
    clientSocket.Connect(new IPEndPoint(IPAddress.Parse(ipaddress), port));        //客戶端開啟線程接收數(shù)據(jù)        thread = new Thread(ReceiveMessage);        thread.Start();    }
}

void ReceiveMessage()
{
    while (true)
    {
        if (clientSocket.Connected == false)
        { break; }
        int length = clientSocket.Receive(data);
        message = Encoding.UTF8.GetString(data, 0, length);
        print(message);
    }
}
new void SendMessage(string message)
{
    byte[] data = Encoding.UTF8.GetBytes(message);
    clientSocket.Send(data);
}
public void OnSendButtonClick()
{
    string value = MessageInput.text;
    SendMessage(value);
    MessageInput.text = " ";
}  
/**    
 * * unity自帶方法  
 * * 停止運行時會執(zhí)行   
 * * */
void OnDestroy()
{        
    //關閉連接,分接收功能和發(fā)送功能,both為兩者均關閉     
    clientSocket.Shutdown(SocketShutdown.Both);
    clientSocket.Close();
}

}

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容