golang 与unity socket 通信

栏目: Go · 发布时间: 6年前

内容简介:1.golang 代码:////////////////////////////package main

1.golang 代码:

////////////////////////////

golang 与unity socket 通信

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" //表示监听本地所有ip的8080端口,也可以这样写:addr := ":8080"

listener, err := net.Listen("tcp", addr) //使用协议是tcp,监听的地址是addr

if err != nil {

log.Fatal(err)

}

conn, err := listener.Accept() //用conn接收链接

if err!=nil {

return

}

go func() {

defer listener.Close() //关闭监听的端口

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方法将这些数据返回给客户端。

}

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];// 数据容器

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 = "";
    }
}

/**     
 *连接服务器端函数   
 **/
void ConnectToServer()
{
    clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);        //跟服务器连接     
    clientSocket.Connect(new IPEndPoint(IPAddress.Parse(ipaddress), port));        //客户端开启线程接收数据        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自带方法  
 * * 停止运行时会执行   
 * * */
void OnDestroy()
{        
    //关闭连接,分接收功能和发送功能,both为两者均关闭     
    clientSocket.Shutdown(SocketShutdown.Both);
    clientSocket.Close();
}

}


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员成长的烦恼

程序员成长的烦恼

吴亮、周金桥、李春雷、周礼 / 华中科技大学出版社 / 2011-4 / 28.00元

还在犹豫该不该转行学编程?还在编程的道路上摸爬滚打?在追寻梦想的道路上你并不孤单,《程序员成长的烦恼》中的四位“草根”程序员也曾有过类似的困惑。看看油田焊接技术员出身的周金桥是如何成功转行当上程序员的,做过钳工、当过外贸跟单员的李春雷是如何自学编程的,打小在486计算机上学习编程的吴亮是如何一路坚持下来的,工作中屡屡受挫、频繁跳槽的周礼是如何找到出路的。 《程序员成长的烦恼》记录了他们一步一......一起来看看 《程序员成长的烦恼》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具