2009-11-26 4 views
0

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

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 bon que je voudrais qu'il fonctionne. Lorsque je cours mon programme et que je l'envoie pour une chaîne "Bonjour tout le monde", il le reçoit et finit le travail et se termine. 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 Im en utilisant ce

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(); 
     } 
    } 
} 

Répondre

1

votre ami si vous aviez utilisé un fil de sorte que votre application principale n'a pas été verrouillé. Maintenant que vous avez créé un nouveau thread, vous pouvez utiliser une boucle while dans ce thread comme vous le faisiez précédemment.

+0

droit, merci pour votre réponse. – Allek