Microsoft BandからUWPアプリケーションからUnityに受け取った心拍数をいくつか送付したいと思います。私は現在ユニティでTcp Serverを稼働していますが、UWPでSystem.Net.Socketsを使用することはできませんでした。誰でもUWPアプリケーションでTCPクライアントを作成し、そのデータをUnityに送信する方法を知っていますか?次のようにUWPアプリからUnity経由で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();
});
}
ご質問はありません。投稿したUnityサーバコードの代わりに 'TcpListner'を使用することにしたので、あなたが書いたサーバコードが動作していると思いますか?クライアントコードを作成する前にテストしましたか?私は、サーバをテストせずにクライアントで作業するのは時間の無駄だろうと思う。サーバーのテスト方法がわからない場合はお知らせください。 – Programmer
@Programmer、私はGeneric BLE心拍モニタから心拍数を取得したクライアントと接続していた別のプロジェクトに同じサーバーを使用していました。それは完璧に働いた。これは1年前にStakeoverflowに投稿したコードだった:http://stackoverflow.com/questions/30161845/unity-delay-in-sending-the-current-value-when-using-sockets – ChaosEmperor93
Ok good 。以前私も同様の質問に答えてきたと思います。 http://stackoverflow.com/a/35890916/3785314私はその人のためのコードを提供していません。今あなたのUWPプログラムで 'TcpClient'を動作させる必要がありますか?以前はUWPを使ったことがありません。 'System.Net.Sockets;'名前空間は利用できますか? – Programmer