J'ai un serveur async tcp qui peut accepter plusieurs clients en même temps. Les scénarios dans lesquels le client demande des données au serveur sont bien servis. Maintenant, j'essaie d'implémenter la situation dans laquelle le serveur doit trouver un client particulier et lui envoyer des données, c'est-à-dire que le client est connecté mais n'a pas demandé de données mais le serveur veut lui envoyer des données. Comment puis-je trouver le thread qui est déjà en cours d'exécution entre le serveur et le client et y placer des données?Le serveur TCP peut-il démarrer la communication avec le client
Voici le code du serveur:
public async void RunServerAsync()
{
tcpListener.Start();
while (true)
{
try
{
var client = await tcpListener.AcceptTcpClientAsync();
Accept(client);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
private async void Accept(TcpClient client)
{
//get client information
String clientEndPoint = client.Client.RemoteEndPoint.ToString();
Console.WriteLine("Client connected at " + clientEndPoint);
await Task.Yield();
try
{
using (client)
using (NetworkStream stream = client.GetStream())
{
byte[] dataReceived = new byte[100];
while (true) //read input stream
{
try
{
int x = await stream.ReadAsync(dataReceived, 0, dataReceived.Length);
if (x != 0)
{
//pass on data for processing
byte[] dataToSend = await ProcessData(dataReceived);
//send response,if any, to the client
if (dataToSend != null)
{
await stream.WriteAsync(dataToSend, 0, dataToSend.Length);
ConsoleMessages.DisplayDataSent(dataReceived, dataToSend);
}
}
}
catch (ObjectDisposedException)
{
stream.Close();
}
}
}
} //end try
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}//end Accept(TcpClient client)
Je ne pense pas que cette méthode, je veux dire le client tcp fonctionne très bien, je vous suggère d'utiliser la méthode async, avec cette méthode, vous pouvez gérer chaque connexion bu un fil, avec cette méthode, vous pouvez envoyer votre IP de votre client au serveur comme ID, et envoyer des informations si vous voulez –