Question

Je voudrais écrire un programme pour recevoir des données à l'aide de tcpClient à partir d'une adresse IP et d'un numéro de port spécifiés. La première fois que je l'ai fait en utilisant while (true). Un de mes amis m'a dit d'utiliser du fil au lieu de la boucle while. Alors j'ai fait comme il l'a dit.

public static void receiveThread()
{
    TcpClient tcpClient = new TcpClient();
    try
    {
        tcpClient.Connect(ipAddress, incPort);
        Console.WriteLine("Connection accepted ...");
    }
    catch (Exception e)
    {
        Console.WriteLine(e + "\nPress enter to exit...");
        Console.ReadKey();
        return;
    }
    NetworkStream stream = tcpClient.GetStream();
    StreamReader incStreamReader = new StreamReader(stream);

    try
    {
        data = incStreamReader.ReadLine();
        Console.WriteLine("Received data: {0}", data);
    }
    catch (Exception e)
    {
        Console.WriteLine(e + "\nPress enter to exit...");
    }
}

Fonctionne bien mais pas aussi bien que je le souhaiterais. Quand je lance mon programme et que je lui envoie pour exaple "Hello world" string, il le reçoit, puis termine le travail et quitte. Je veux garder le fil pour plus de données entrantes mais je ne sais pas comment le faire. Peut-être que quelqu'un a une idée pour moi comment le faire?

Pour envoyer des données en utilisant cette

using System;
using System.Net;
using System.Net.Sockets;
using System.IO;

public class Program
{
public static string ipAddress = "127.0.0.1";
public static int listenerPort = 6600;
public static string message;

static void Main(string[] args)
{
    TcpListener tcpListener = new TcpListener(IPAddress.Parse(ipAddress),listenerPort);
    tcpListener.Start();

    Socket socket = tcpListener.AcceptSocket();
    Console.WriteLine("Connection accepted...");
    while (true)
    {
        if (socket.Connected)
        {
            NetworkStream networkStream = new NetworkStream(socket);
            StreamWriter streamWriter = new StreamWriter(networkStream);

            message = Console.ReadLine();
            streamWriter.WriteLine(message);
            streamWriter.Flush();
        }
    }
}
Était-ce utile?

La solution

Consultez cette propriété de l'objet TCPClient

http://msdn.microsoft .com / fr-us / library / system.net.sockets.tcpclient.connected.aspx

vous pouvez l'utiliser comme tel

while(tcpClient.Connected)
{
    // do something while conn is open
}

Autres conseils

Votre ami vous a demandé d'utiliser un fil de discussion pour que votre application principale ne soit pas bloquée. Maintenant que vous avez créé un nouveau fil, vous pouvez utiliser une boucle while à l'intérieur de ce fil, comme vous le faisiez précédemment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top