Ich möchte einige Herzfrequenzwerte, die ich von einem Microsoft Band erhalte, von einer UWP-App an Unity senden. Ich habe derzeit einen funktionierenden TCP-Server in Unity, aber ich konnte nicht scheinen, System.Net.Sockets in UWP zu verwenden. Jeder weiß, wie man einen TCP-Client in der UWP-App erstellt und die Daten an Unity sendet.Wie verbinde ich mich über die Sockets von der UWP-App zum Unity-Spielserver-Socket?
Mein Server-Code lautet wie folgt:
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();
}
}
Mein UWP-Code ist wie folgt:
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();
});
}
Ich habe ein paar Fragen für Sie. Da Sie beschlossen haben, 'TcpListner' anstelle des von mir geposteten Unity-Servercodes zu verwenden, was bringt Sie dazu, zu glauben, dass der von Ihnen geschriebene Servercode funktioniert? Haben Sie es getestet, bevor Sie Ihren Client-Code erstellt haben? Ich denke, es wäre Zeitverschwendung, am Client zu arbeiten, ohne den Server zu testen. Lassen Sie es mich wissen, wenn Sie nicht wissen, wie man einen Server testet. – Programmer
@Programmer, ich benutzte den gleichen Server für ein anderes Projekt, das ich mit einem Client verbunden hatte, der die Herzfrequenzwerte von Generic BLE Herzfrequenzmonitoren nahm. Es funktionierte einwandfrei. Das war der Code, den ich vor einem Jahr auf Stakeoverflow gepostet habe: http://stackoverflow.com/questions/30161845/unity-delay-in-sending-the-current-value-when-using-sockets – ChaosEmperor93
Ok gut . Ich denke, ich habe zuvor ähnliche Fragen beantwortet. http://Stackoverflow.com/a/35890916/3785314 Ich habe gerade keinen Code für die Person zur Verfügung gestellt. Jetzt müssen Sie 'TcpClient' in Ihrem UWP-Programm arbeiten lassen? Ich habe noch nie UWP benutzt. Ist der Namespace 'System.Net.Sockets;' in ihm vorhanden? – Programmer