Hololens支持单机版的C/S架构的进程之间通信吗?
Hololens Unity3D 如何使用Socket
- 已编辑
你要单个app内通讯还是多个app内通讯
Hololens支持单机版的C/S架构的进程之间通信吗?
- 已编辑
win10 里使用 socket需要用 Windows.Networking下的类库实现,我们如果直接在Unity C# 脚本里 using Windows.Networking是不可以的,Unity编辑器在编译的时候是不能通过的。Windows.Networking 这是属于 WinRT API,只有在VS里才能被编译。
所以,如果要在Unity开发HoloLens程序使用 WinRT API 需要用 #if WINDOWS_UWP …… #endif 对相应的代码进行包裹,这样在Unity里就不会报错,build后再VS里再编译打包
可以尝试类似如下代码实现socket
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if WINDOWS_UWP
using Windows.Networking;
using Windows.Networking.Sockets;
using Windows.Storage.Streams;
#endif
public class Socket : MonoBehaviour
{
#if WINDOWS_UWP
StreamSocket socket;
StreamSocketListener listener;
String port;
#endif
// Use this for initialization
void Start()
{
#if WINDOWS_UWP
listener = new StreamSocketListener();
port = "8888";
listener.ConnectionReceived += Listener_ConnectionReceived;
listener.Control.KeepAlive = false;
Listener_Start();
#endif
}
#if WINDOWS_UWP
private async void Listener_Start()
{
Debug.Log("Listener started");
try
{
await listener.BindServiceNameAsync(port);
}
catch (Exception e)
{
Debug.Log("Error: " + e.Message);
}
Debug.Log("Listening");
}
private async void Listener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
Debug.Log("Connection received");
DataReader reader = new DataReader(args.Socket.InputStream);
try
{
while (true)
{
// Read first 4 bytes (length of the subsequent string).
uint sizeFieldCount = await reader.LoadAsync(sizeof(uint));
if (sizeFieldCount != sizeof(uint))
{
// The underlying socket was closed before we were able to read the whole data.
return;
}
// Read the string.
uint stringLength = reader.ReadUInt32();
uint actualStringLength = await reader.LoadAsync(stringLength);
if (stringLength != actualStringLength)
{
// The underlying socket was closed before we were able to read the whole data.
return;
}
// dump data
Debug.Log("Received: " + reader.ReadString(actualStringLength));
}
}
catch (Exception exception)
{
// If this is an unknown status it means that the error is fatal and retry will likely fail.
if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown)
{
throw;
}
// dump data
Debug.Log("Read Stream failed: " + exception.Message);
}
}
#endif
// Update is called once per frame
void Update()
{
}
}
你好 streamSocket 已经连上服务器了 但是 socket listener.ConnectionReceived 却没反应 服务端是用C# Socket写的 发消息 收消息都不行
- 已编辑
- 已编辑
15110247174 你说下具体的需求想实现什么样的网络交互?
15110247174
如果你是要用http协议访问网络的话,那么UnityEngine.WWW类就是个不错的选择
如果你是做设备间互相共享数据,比如网络游戏那样的,用Unity的网络引擎UNET,在 Component->Networking 里可以看到相关组件
- 已编辑
15110247174
如果你是要用http协议访问网络的话,那么UnityEngine.WWW类就是个不错的选择
如果你是做设备间互相共享数据,比如网络游戏那样的,用Unity的网络引擎UNET,在 Component->Networking 里可以看到相关组件
Unity
3D多人游戏(一) : UNET快速入门—在线播放—优酷网,视频高清在线观看
http://v.youku.com/v_show/id_XMTQ1MTc3Nzk1Mg==.html
Unity3D多人游戏(二) : UNET服务器指令与变量同步—在线播放—优酷网,视频高清在线观看
http://v.youku.com/v_show/id_XMTQ1NTcxNzA0OA==.html
- 已编辑
Unity3D多人游戏(一) : UNET快速入门
Unity3D多人游戏(二) : UNET服务器指令与变量同步
UNET 不仅提供了快速建立多人游戏共享的High-Level API,也支持传输层的Low-Level API给开发者用来设计自己的socket协议,
https://docs.unity3d.com/Manual/UNetUsingTransport.html
手册里有例子,怎么创建Server和client,以及如何收发数据包
- 已编辑
祥哥 服务器是php写的,是采集一些设备的数据,客户端是在hololens进行数据的展示,要走socket或websocket,我之前也看了一些unity networking的资料,但我感觉这个适合服务器端也是unity的开发。
15110247174 为什么要走socket或websocket,http 的会更简单些。你是需要长连接吗?短链接还是http API方式更方便
祥哥 是需要长连接
15110247174 那推荐你用UNET的NetworkTransport
- 已编辑
您好,我想请问 在客户端里想一直接受服务器发来的数据要怎么做呢,exe可以用thread线程
但是在 uwp框架下发布编译器报错,无法编译
网上搜需要用task,但是在unity3d应用using System.Threading.Tasks;
又显示没有这样的头文件...很困惑...求帮助谢谢
祥哥 您好,我想请问 在客户端里想一直接受服务器发来的数据要怎么做呢,exe可以用thread线程
但是在 uwp框架下发布编译器报错,无法编译
网上搜需要用task,但是在unity3d应用using System.Threading.Tasks;
又显示没有这样的头文件...很困惑...求帮助谢谢
@Holo.X#1104 这个用不了吧
祥哥 请问大佬, vs2017 Unity 2017.3.0f3 ,win10 SDK 1.0.17134.0, UnityEngine.WWW 访问Web服务器失败.查不出问题.Unity中正常,部署后就不行.
FifthGently 想问一下 现在解决了吗 我和你有一样的问题