J'écris un simple serveur Tcp dans Unity et mon application Flash s'y connecte. J'ai trouvé un excellent tutoriel sur le serveur Tcp en ligne, et mon application flash s'y connecte très bien. Cependant, je ne suis pas en mesure d'envoyer des données en dehors du fil d'écoute au client connecté. J'ai essayé de créer une référence globale du Tcpclient obtenu à l'intérieur du thread. Cependant, cette référence (sclient) ne fonctionne qu'à l'intérieur du thread d'écoute, imprimée Null à la console en dehors du thread. Il doit y avoir quelque chose que je peux faire pour conserver la référence du client TCP pour une utilisation ultérieure ou y accéder depuis l'extérieur du thread de bloc. S'il vous plaît aider!Ponçage des données d'un serveur C# TCP vers un client connecté en dehors du fil d'écoute
using UnityEngine;
using System.Collections;
using System;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Net;
public class TCPServer: MonoBehaviour
{
private TcpListener tcpListener;
private Thread listenThread;
private TcpClient sclient;
public float fireRate = 0.5F;
private float nextFire = 0.0F;
public TCPServer()
{
IPAddress localAddress = IPAddress.Parse("127.0.0.1");
this.tcpListener = new TcpListener(localAddress, 9001);
this.listenThread = new Thread(new ThreadStart(ListenForClients));
this.listenThread.Start();
}
public void ListenForClients()
{
this.tcpListener.Start();
while (true)
{
//blocks until a client has connected to the server
sclient = this.tcpListener.AcceptTcpClient();
print(sclient);//print "System.Net.Sockets.TcpClient" in console
this.sMessage("Can you hear me now?");//this one works fine
}
}
public void sMessage(String m){
print(cStream); //print "Null" to console
NetworkStream clientStream = sclient.GetStream();
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] buffer = encoder.GetBytes(m);
print("Received Connection from " + tcpClient.Client.RemoteEndPoint);
print("Sending message..");
print(clientStream.CanWrite);//returns true in console
clientStream.Write(buffer, 0 , buffer.Length);
clientStream.WriteByte (0);
clientStream.Flush();
}
void Update() {
if (Input.GetButton("Fire1") && Time.time > nextFire) {
nextFire = Time.time + fireRate;
this.sMessage("BOOM BOOM");//this one won't work. keep saying sclient is null
}
}
Salut Ivar Merci pour votre solution, je vais essayer, j'ai 0 expérience dans la programmation de thread/session. Avant d'entrer dans une seconde, une fois que je commence la session, comment envoyer des données au client? par exemple, j'ai une valeur externe qui est constamment mise à jour et envoyée au client, comment puis-je faire cela dans cette session? – Ghettokon
Je ne comprends pas exactement ce que vous voulez dire ... – Ivar