【发布时间】:2016-09-15 13:04:08
【问题描述】:
我想将我从 Microsoft Band 收到的一些心率值从 UWP 应用发送到 Unity。我目前在 Unity 中有一个工作的 Tcp 服务器,但我似乎无法在 UWP 中使用 System.Net.Sockets。有谁知道如何在 UWP 应用上制作 tcp 客户端并将数据发送到 Unity?
我的服务器代码如下:
using UnityEngine;
using System.Collections;
using System.Net.Sockets;
using System.IO;
using System.Net;
using System.Threading;
public class Server {
public static TcpListener listener;
public static Socket soc;
public static NetworkStream s;
public void StartService () {
listener = new TcpListener (15579);
listener.Start ();
for(int i = 0;i < 1;i++){
Thread t = new Thread(new ThreadStart(Service));
t.Start();
}
}
void Service () {
while (true)
{
soc = listener.AcceptSocket ();
s = new NetworkStream (soc);
StreamReader sr = new StreamReader (s);
StreamWriter sw = new StreamWriter (s);
sw.AutoFlush = true;
while(true)
{
string heartrate = sr.ReadLine ();
if(heartrate != null)
{
HeartRateController.CurrentHeartRate = int.Parse(heartrate);
Debug.Log(HeartRateController.CurrentHeartRate);
}
else if (heartrate == null)
{
break;
}
}
s.Close();
}
}
void OnApplicationQuit()
{
Debug.Log ("END");
listener.Stop ();
s.Close();
soc.Close();
}
}
我的UWP代码如下:
public IBandInfo[] pairedBands;
public IBandClient bandClient;
public IBandHeartRateReading heartreading;
public MainPage()
{
this.InitializeComponent();
ConnectWithBand();
}
public async void ConnectWithBand()
{
pairedBands = await BandClientManager.Instance.GetBandsAsync();
try
{
if (pairedBands.Length > 0)
{
bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]);
}
else
{
return;
}
}
catch (BandException ex)
{
textBlock.Text = ex.Message;
}
GetHeartRate();
}
public async void GetHeartRate()
{
IEnumerable<TimeSpan> supportedHeartBeatReportingIntervals = bandClient.SensorManager.HeartRate.SupportedReportingIntervals;
bandClient.SensorManager.HeartRate.ReportingInterval = supportedHeartBeatReportingIntervals.First<TimeSpan>();
bandClient.SensorManager.HeartRate.ReadingChanged += this.OnHeartRateChanged;
try
{
await bandClient.SensorManager.HeartRate.StartReadingsAsync();
}
catch (BandException ex)
{
throw ex;
}
Window.Current.Closed += async (ss, ee) =>
{
try
{
await bandClient.SensorManager.HeartRate.StopReadingsAsync();
}
catch (BandException ex)
{
// handle a Band connection exception
throw ex;
}
};
}
private async void OnHeartRateChanged(object sender, BandSensorReadingEventArgs<IBandHeartRateReading> e)
{
var hR = e.SensorReading.HeartRate;
await textBlock.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Low, () =>
{
textBlock.Text = hR.ToString();
});
}
【问题讨论】:
-
我有几个问题要问你。既然您决定使用
TcpListner而不是我发布的那个 Unity 服务器代码,是什么让您认为您编写的服务器代码有效?您在编写客户端代码之前是否对其进行了测试?我认为在没有测试服务器的情况下在客户端上工作会浪费时间。如果您不知道如何测试服务器,请告诉我。 -
@Programmer,我将同一台服务器用于另一个项目,该服务器与一个客户端连接,该客户端从通用 BLE 心率监视器获取心率值。它完美无缺。这是我一年前在 Stakeoverflow 上发布的代码:stackoverflow.com/questions/30161845/…
-
好吧好吧。我想我以前回答过类似的问题。 stackoverflow.com/a/35890916/3785314我只是没有提供此人的代码。现在您需要让
TcpClient在您的 UWP 程序中工作吗?我以前从未使用过 UWP。System.Net.Sockets;命名空间在其中吗? -
@Programmer,它是但它不包括 TcpClient。它似乎只使用套接字。我会在那里看看你的答案,然后告诉你。如果需要,我非常愿意使用与 TCP 不同的方法,只要它有效,哈哈
-
等一下。不要费心去看那里。你所做的正是他所做的。如果找到答案。
标签: c# sockets unity3d uwp visual-studio-2015