Hallo leut,
nächstes Problem 😁
in dem TCP Listener hängt er sich ab dem Befehl
TcpClient client = server.AcceptTcpClient();
(erster Befehl in der while Schleife auf).
Dh er geht nicht in den Befehl danach, auch wenn ich breakpoints setze bringt es mir nichts, denn er kommt da einfach nicht raus.
public class MyTcpListener
{
public static void Connect(string ipAdd, string port1, TextBox textBox_MessageToReceive)
{
System.Diagnostics.Debug.WriteLine("vor try");
TcpListener server = null;
try
{
//Console.WriteLine("test");
System.Diagnostics.Debug.WriteLine("im Try-Block");
// Set the TcpListener on port 13000.
Int32 port = Int32.Parse(port1);
IPAddress ip = IPAddress.Parse(ipAdd);
System.Diagnostics.Debug.WriteLine("Waiting for a connection... ");
// TcpListener server = new TcpListener(port);
server = new TcpListener(ip, port);
// Start listening for client requests.
server.Start();
// Buffer for reading data
Byte[] bytes = new Byte[256];
String data = null;
// Enter the listening loop.
while (true)
{
// Perform a blocking call to accept requests.
// You could also user server.AcceptSocket() here.
TcpClient client = server.AcceptTcpClient();
System.Windows.MessageBox.Show("Connected!");
data = null;
// Get a stream object for reading and writing
NetworkStream stream = client.GetStream();
int i;
// Loop to receive all the data sent by the client.
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
// Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine("Received: {0}", data);
// Process the data sent by the client.
data = data.ToUpper();
byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
// Send back a response.
stream.Write(msg, 0, msg.Length);
Console.WriteLine("Sent: {0}", data);
}
// Shutdown and end connection
client.Close();
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
Console.ReadKey();
}
finally
{
// Stop listening for new clients.
server.Stop();
}
Console.WriteLine("\nHit enter to continue...");
Console.Read();
}
}
please help
Hatten wir hier im Forum schon ca. 864334 mal:
Wie Du der Dokumentation entnehmen kannst, ist AcceptTcpClient eine blockierende Methode.
Diese blockt solange, bis sich ein Client verbindet - und blockt danach wieder.
Das steht sogar in Deinem Code Kommentar! Code etwa blind kopiert? 😉
Ergo: asynchron programmieren und die asynchrone Methode verwenden, wie es auch in der Dokumentation verwiesen ist.
PS: auch Du darfst sehr gerne in Zukunft einen Titel wählen, der aussagekräftig ist und das Thema im richtigen Forenbereich posten 🙂
[Hinweis] Wie poste ich richtig?
Edit:
PPS: ich sehe gerade Du hast den Code sogar 1:1 von der Microsoft Docs Dokumentation kopiert - offenbar ohne den dortigen Hinweis zu lesen 👍 👍
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
wenn ich aber die Zeile rausnehme und versuche asynchron zu machen gibt er mir folgende exception aus:
System.NotImplementedException: Die Methode oder der Vorgang ist nicht implementiert.
bei WpfApp2.MyTcpListener.AcceptTcpClientAsync() in C:\Development\cp50_Applications\DesiteRemote\dotNET\MyTcpListener.cs:Zeile 100.
bei WpfApp2.MyTcpListener.<ConnectAsync>d__0.MoveNext() in C:\Development\cp50_Applications\DesiteRemote\dotNET\MyTcpListener.cs:Zeile 49.
obwohl ich das hier implementiert habe
private static Task<TcpClient> AcceptTcpClientAsync()
{
throw new NotImplementedException();
}
WTF?!
Liest Du Dir Dein Code, den Du schreibst, selbst durch?
Wenn Du eine NotImplementedException
schreibst, dann ist klar, dass eine System.NotImplementedException
geworfen wird..... dafür ist es da.
Darüber hinaus musst Du nichts selbst implementieren, sondern einfach die entsprechende Methode aufrufen.
Wirkt als ob Du extrem chaotisch an die Sache gehst.. ich weiß nicht, wie man Dir da helfen soll.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Wirkt als ob Du extrem chaotisch an die Sache gehst.. ich weiß nicht, wie man Dir da helfen soll.
Haha, das erinnert mich manchmal an mich selbst 😁
Zunächst sollte er mal den oberen (kopierten) code kapieren, bevor er mit asynchronität dazwischenfunkt und sich am Ende noch weniger auskennt 😉
Also zurück zum 1. Beitrag, hast du es geschafft den gesamten Code zu verstehen oder hängt es da noch irgendwo im Verständnis?
:rtfm:
SG Thomas
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄
Hallo,
statt den Code irgendwo unbesehen herzukopieren, und sich dann wundern, dass es nicht 1:1 im eigenen Kontext funktioniert, könntest Du Dir erst mal [FAQ] TcpClient: einfaches Beispiel anschauen - nein, nicht nur anschauen, auch durchlesen 😉 - und versuchen, das dort Geschriebene zu verstehen.
Danach solltest Du ein Grundverständnis dafür haben, wie Netzwerkkommunikation funktioniert.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
das Problem ist ich bin gerade neu im Praktikum.
Und habe in meiner Umschulung bis jetzt nur Grundlagen gemacht und jetzt komme ich hierhin und mir wird ein fertiges voriges Programm in C++ gegeben, welches ich in C#
umschreiben soll.
Und da sind halt dinge drin von denen ich vorher nie gehört habe. Wie zB TcpListener, BackgroundWorker, Async usw
Und selbst wenn ich mit meinem hier zuständigen Ausbilder rede, stehen die oft vor Fragezeichen.
Keine Ahnung wo das noch hinführen soll