最近学校引进了一台hololens,本人非常开心,老师让我做数据传输的方面,本以为会非常简单,以为只是用c#的.net类就可以了。没想到做完之后bulild为windows应用时各种报错,找遍了各种文档最后才发现unity对windows应用的支持还是有欠缺的,例如.net的部分类用不了,www类也不能用。这对于想用unity做带有网络数据传输的windows应用开发特别不利,想了很多办法,最后决定用unity引擎自带的unet来做。值得注意的是unet有hlapi于llapi,这两个一个是底层的一个是上层的,llapi可以定制的比较多所以我选择了llapi。用上之后才发现是如此之坑,我按照unity官方文档来做的但是可以连接但不可以传数据,这个问题困扰了我两天,最后在unity的问题反馈那找到了答案,因为llapi是用的transport layer api用的是udp所以不是面向连接,服务端、客户端连上端口后,客户端会连接服务端,然后建立了连接。注意,此时发不了数据,客户端必须知道连上之后才能发,而且每次只能发一次。也就是说只能连一次发一次,真的是巨坑,如果想少数次的发少量数据可以用它,多次发数据就别用它了。以下是代码:
服务端
int socketId;
int connectionId;
int myUnreliableChannelId;
int myReiliableChannelId;
// Use this for initialization
void Start()
{
NetworkTransport.Init();
ConnectionConfig config = new ConnectionConfig();
myReiliableChannelId = config.AddChannel(QosType.Reliable);
// myUnreliableChannelId = config.AddChannel(QosType.Unreliable);
HostTopology topology = new HostTopology(config, 10);
socketId = NetworkTransport.AddHost(topology, 8888);
byte error;
connectionId = NetworkTransport.Connect(socketId, "192.168.0.100", 2000, 0, out error);
}
// Update is called once per frame
void Update()
{
int recHostId;
int