Gewinde zum Empfangen von Daten von einem IP und Port
-
05-07-2019 - |
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();
}
}
}
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.