Frage

Ich mag ein Programm schreiben, einige Daten unter Verwendung TcpClient von einer bestimmten IP und Port-Nummer zu erhalten. Zum ersten Mal habe ich es bei der Verwendung von (true). Freund von mir erzählte mir Thread statt while-Schleife zu verwenden. Also tat ich, wie er sagte.

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...");
    }
}

funktioniert gut, aber nicht so gut wie ich es arbeiten möchte. Wenn Im mein Programm läuft und um es für exaple Senden „Hallo Welt“ string, empfängt er sie und dann den Job Finishing-und Aussteigen. Ich mag für mehr eingehenden Daten den Faden halten, aber ich weiß nicht, wie es zu tun. Vielleicht hat jemand einen Hinweis für mich hat, wie es zu tun?

Um die Daten Im Senden mit diesem

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();
        }
    }
}
War es hilfreich?

Lösung

Haben Sie einen Blick auf diese Eigenschaft des TCPClient Object

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

Sie können es als solche verwenden

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

Andere Tipps

Ihr Freund hatte sie einen Thread verwenden, so dass die Hauptanwendung nicht gesperrt wurde oben. Nun, da Sie einen neuen Thread erstellt haben Sie eine while-Schleife innerhalb dieses Threads verwenden können, wie Sie vorher taten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top