私は、TCPサーバーとしてnode.js
をテストしています。今後のプロジェクトではクライアントとしてUnity3d
をテストしています。Unity3d - Node.js tcp connectionクライアントがすぐに更新しない
サーバーからデータを送受信できる単純なチャットインターフェイスunity3d
を作成します。すべて私は2つのクライアント、Unity editor
とUnity application
と私はメッセージを送信するたびにサーバーがすぐにピックアップし、terminal
に表示すると、私はテストするまで正常に動作するようです。しかし、クライアント側では、クライアントにフォーカスするためにクリックするとディスプレイインターフェイスが更新されるだけです(Unity editor
またはUnity application
)。
以下の私のコードは次のとおりです。
のNode.js
net = require('net');
var clients = [];
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort
clients.push(socket);
socket.write("Welcome " + socket.name + "\n");
broadcast(socket.name + " joined the chat\n", socket);
socket.on('data', function (data) {
broadcast(socket.name + "> " + data, socket);
});
socket.on('end', function() {
clients.splice(clients.indexOf(socket), 1);
broadcast(socket.name + " left the chat.\n");
});
function broadcast(message, sender) {
clients.forEach(function (client) {
if (client === sender) return;
client.write(message);
});
process.stdout.write(message)
}
}).listen(5000);
// Put a friendly message on the terminal of the server.
console.log("Chat server running at port 5000\n");
client.cs何が不足している
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Net.Sockets;
using System.IO;
public class client : MonoBehaviour {
private bool socketReady;
private TcpClient socket;
private NetworkStream stream;
private StreamWriter writer;
private StreamReader reader;
public Text servermessage;
public InputField input;
// Use this for initialization
void Start() {
ConnectToServer();
}
// Update is called once per frame
void Update() {
if(socketReady){
if(stream.DataAvailable){
string data = reader.ReadLine();
if(data != null){
OnIncomingData (data);
}
}
}
}
public void ConnectToServer(){
if(socketReady)
return;
string host = "127.0.0.1";
int port = 5000;
try
{
socket = new TcpClient(host,port);
stream = socket.GetStream();
writer = new StreamWriter(stream);
reader = new StreamReader(stream);
socketReady = true;
Debug.Log("socket :"+ reader.ToString());
}
catch (System.Exception e)
{
Debug.Log("socket error :"+ e);
}
}
private void OnIncomingData(string data){
Debug.Log ("server : "+ data);
servermessage.text = data;
}
public void OnOutgoingData(string data){
if (!socketReady)
return;
if (input.text == "") {
writer.WriteLine (data);
} else {
writer.WriteLine (input.text);
}
writer.Flush();
input.text = "";
}
}
?すべてのクライアントインターフェイスで即時更新が表示されるようにするにはどうすればよいですか?
純粋にコメント、これらの日、それは信じられないほど簡単だそれをオンにし、そしてそれはあなたが
参照焦点を当てていない場合であっても更新する必要がありますにだけ使用back4app.com、firebase.comなど! – Fattie