Ausführliches TCP und UDP Tutorial

    • VB.NET

    Es gibt 54 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

      Ausführliches TCP und UDP Tutorial

      Ausführliches TCP und UDP Tutorial





      OK zu allererst ein TCP Client und Server, der eine Verbindung annehmen kann.



      Der TCP Client:


      VB.NET-Quellcode

      1. Imports System.Net.Sockets
      2. Imports System.IO
      3. Public Class Form1
      4. 'Variablen:
      5. Dim stream As NetworkStream
      6. Dim streamw As StreamWriter
      7. Dim streamr As StreamReader
      8. Dim Client As New TcpClient
      9. Dim IP As String = "192.168.111.17"
      10. Dim Port As Integer = 4000
      11. Dim loginname As String = "abc" ' Diese Variable ist nicht Pflicht! Aber nützlich für ein Chatprogram...
      12. '_________________
      13. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      14. 'Button1 wird geclickt
      15. Client.Connect(IP, Port) 'Client verbindet sich mit IP: 192.168.111.17 und Port 4000
      16. If Client.Connected Then
      17. stream = Client.GetStream ' Stream wird auf Client verwiesen
      18. streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert
      19. streamr = New StreamReader(stream) ' Stream zum Empfangen wird deklariert
      20. login() ' Sub Login
      21. Else
      22. MsgBox("Verbidnung konnte nicht mit " & IP & " aufgebaut werden!")
      23. End If
      24. End Sub
      25. Sub client_send(ByVal text As String)
      26. streamw.WriteLine(text)
      27. streamw.Flush()
      28. End Sub
      29. Function client_recieve() As String
      30. client_recieve = streamr.ReadLine
      31. End Function
      32. ' Nach der erfolgreichen verbindung mit der IP und dem Port wird dieser Sub aufgerufen:
      33. Sub login()
      34. Try
      35. 'Hier kann man jetzt empfangen wie man will.
      36. 'Auch die reinfolge ist egal.
      37. 'Ich benutzte hier 1 mal senden, einmal empfangen und dann wieder von vorne...
      38. 'Man kann aber auch 2 mal Empfangen und 2 mal Senden nehmen oder...... wies einem so bekommt^^
      39. client_send("onl " & loginname)
      40. If client_recieve() = "ok" Then 'Oder sonst irgend was. Ist nur ein Beispiel für einen Login
      41. Send_irgendwas() ' Hier kann gehts zum nächsten sub um irgend welche Daten zu versenden...
      42. Else
      43. 'Hier den Code wenn das Anmelden Fehlgeschlagen hat. Goto oder einen Sub aufrufen oder....
      44. Exit Sub ' Versteht sich von Selbst...
      45. End If
      46. Catch
      47. ' Hier kann man eine Error Message ausgeben oder eine Automatische Fehlerbehebung machen,....
      48. End Try
      49. End Sub
      50. Sub Send_irgendwas()
      51. client_send("Irgendwas")
      52. If client_recieve() = "Auch wieder irgendwas..." Then
      53. '.....
      54. Else
      55. '....
      56. End If
      57. ' Und soo weiter...
      58. ' Und wenn man die verbidnugn schliesen will, dann einfach:
      59. Client.Close()
      60. ' Nichts einfacher als das!^^
      61. End Sub
      62. End Class







      OK jetzt werde ich mal den Code erläutern(Ist anders zum Source Code oben! Hier werden nur die Haupt Sachen erklärt):


      Wir brauchen zu aller erst einmal einen Client. Um diesen, benutzen zu können müssen wir ersteinmal die Sockets Klasse importieren. Damit wir auch die Streams benutzen können werden wir die IO Klasse gleich mit importieren:

      VB.NET-Quellcode

      1. Imports System.Net.Sockets
      2. Imports System.IO





      Wir erstellen jetzt einen TCP Client und nebenbei auch die Streams zum senden und zum empfangen der Daten:

      VB.NET-Quellcode

      1. Dim Client As New TcpClient 'Client
      2. Dim stream As NetworkStream
      3. Dim streamw As StreamWriter 'Zum senden
      4. Dim streamr As StreamReader 'Zum empfangen




      OK. Jetzt machen wir einen Sub indem der Client versucht eine Verbindung mit dem Server herzustellen. Wir nehmen mal die IP Addresse "192.168.111.17" und den Port 4000. Danach kommt der Code um zu schauen ob der Client sich erflogreich Verbinden konnte. Wenn ja, wird auf einen nächsten Sub verwiesen. Wenn nein, wird eine MSGBOX ausgeworfen:


      VB.NET-Quellcode

      1. sub Connect_to_Server(byval ip as string, byval port as integer)
      2. Client.Connect(IP, Port) 'Client verbindet sich mit IP: 192.168.111.17 und Port 4000
      3. If Client.Connected Then
      4. Deklare_Streams() ' Sub Deklare_Streams()
      5. Else
      6. MsgBox("Verbidnung konnte nicht mit " & IP & " aufgebaut werden!")
      7. End If
      8. end sub







      So jetzt wird der SUB
      Deklare_Streams() aufgerufen. Indem werden die Streams, die wir oben schon deklariert haben, auf den Client verwiesen, damit wir Daten senden und empfangen können:


      VB.NET-Quellcode

      1. sub Deklare_Streams()
      2. stream = Client.GetStream ' Stream wird auf Client verwiesen
      3. streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert
      4. streamr = New StreamReader(stream) ' Stream zum Empfangen wird deklariert
      5. end sub







      Jetzt machen wir noch 2 Subs. Einer zum senden der Daten und einen zum Empfangen. Diese bräuchte man nicht unbedingt, da man den Code auch direkt in den Main Sub schreiben könnte. Aber es ist Übersichtlicher:


      VB.NET-Quellcode

      1. Sub client_send(ByVal text As String) ' Sub zum senden der Daten 'text'
      2. streamw.WriteLine(text)
      3. streamw.Flush() ' Achtung! Flush darf nie vergessen werden, da sonst die Daten nicht gesendet werden.
      4. End Sub
      5. Function client_recieve() As String ' Sub zum empfangen der Daten.
      6. client_recieve = streamr.ReadLine
      7. End Function





      Jetzt sind wir schon fast am Ende. Jeder kann jetzt daten senden oder empfangen in einer beliebigen Reinfolge. Ich nehmen jetzt 1 mal senden und 1 mal empfangen. Diese werden in dem Button1_click Sub stehen. Also wenn Button1 angeklickt wird, wird ein Stream gesendet und eine Empfangen.


      VB.NET-Quellcode

      1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      2. client_send("HALLO") ' Dieser Stream geht zum Server.
      3. msgbox (client_recieve()) 'Und hier wird der empfangene Stream, der vom Server als Antwort gesendet wurde, in einer MSGBOX ausgegeben.
      4. end sub





      Und ganz zum Schluss wenn man die Verbindung trennen will:

      VB.NET-Quellcode

      1. Client.close



      So ich hoffe der Client ist klar. Jetzt muss man nur noch alles für sein Projekt anpassen.












      Der Server (Für eine Verbindung):

      VB.NET-Quellcode

      1. Imports System.Net.Sockets
      2. Imports System.IO
      3. Imports System.Net
      4. Public Class Form1
      5. 'Variablen:
      6. Dim stream As NetworkStream
      7. Dim streamw As StreamWriter
      8. Dim streamr As StreamReader
      9. Dim Server As TcpListener
      10. Dim client As New TcpClient
      11. Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 4000)
      12. Dim mainthread As Threading.Thread
      13. '______________
      14. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      15. mainthread = New Threading.Thread(AddressOf mainserver)
      16. mainthread.Start()
      17. End Sub
      18. Sub mainserver()
      19. Try
      20. Server = New TcpListener(ipendpoint)
      21. Server.Start()
      22. client = Server.AcceptTcpClient
      23. stream = client.GetStream
      24. streamr = New StreamReader(stream)
      25. streamw = New StreamWriter(stream) ' Müsste eigentlich alles Klar sein.
      26. While True
      27. Select Case streamr.ReadLine
      28. Case "onl" ' und so weiter eigentlich müsste es heißen select case mid(streamr.readline,1,3) Aber da des ja vielen zu Kompiziert ist lass ich das mal weg^^
      29. streamw.WriteLine("ok") ' Achtung! ist nicht Vollständig!
      30. streamw.Flush() ' Code muss angepasst werden.....
      31. Case "...." ' ......
      32. Case "logoff" '........
      33. End Select
      34. End While
      35. Catch
      36. ' Hier wieder eine Fehler behandlung und ein neuen Versuch den Server zu starten...
      37. End Try
      38. End Sub
      39. Private Sub Form1__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
      40. server.close
      41. Try
      42. mainthread.Abort()
      43. Catch
      44. End Try
      45. End Sub
      46. End Class









      Ok. Jetzt erläutere ich auch den Server Code. Zu aller erst einmal den unterschied zwischen diesem Server und einem Multi Server.
      Dieser Server kann nur einen Client nach dem anderen vornehmen. Wenn der Client sich eine Stunde mit dem Server Verbindet, kann der nächste Client erst danach angenommen werden. Damit wir auch dieses Problem lösen, werde ich weiter unten den Multi Server erklären.


      Zu aller erst müssen wir wieder die IO und die Socket Klasse importieren. Die Net Klasse, inder auch die Socket drinnen ist, importiere ich gleich mit, damit ich die IPendpoint benutzten kann:

      VB.NET-Quellcode

      1. Imports System.Net.Sockets
      2. Imports System.IO
      3. Imports System.Net




      So jetzt werden wir mal alle unsere Variablen deklarieren:

      VB.NET-Quellcode

      1. 'Variablen:
      2. Dim stream As NetworkStream
      3. Dim streamw As StreamWriter
      4. Dim streamr As StreamReader
      5. Dim Server As TcpListener
      6. Dim client As New TcpClient
      7. Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 4000)
      8. Dim mainthread As Threading.Thread
      9. '______________




      Jetzt mal langsam^^. Für Diejenigen denen das jetzt zu schnell mit den Variablen ging:


      VB.NET-Quellcode

      1. Dim stream As NetworkStream
      2. Dim streamw As StreamWriter
      3. Dim streamr As StreamReader


      Das müsste klar sein, da wir das selbe schon oben im Client benutzt haben. Wieder zum empfangen und zum senden benötigen wir diese 3 Streams.


      VB.NET-Quellcode

      1. Dim Server As TcpListener



      Das ist unser Server der nichts anderes tut als eine Clientverbindung anzunehmen.

      Wichtig: Der TCPListener kann keine Daten Versenden oder Empfangen!!! Er nimmt nur ausstehende Verbidnungen an! Um jedoch Anworten zu senden oder zu empfangen, benötigen wir einen Client, denn dieser ist zum senden und emfangen da!





      VB.NET-Quellcode

      1. Dim client As New TcpClient



      Wie oben beschrieben benötigen wir diesen Client um den verbundenen Client zu Anworten und deren Streams auch zu empfangen.



      VB.NET-Quellcode

      1. Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 4000)



      Diese Variable ist sowas wie die Addresse wo der der Server listenen soll. '
      IPAddress.Any' bedeutet nichts anderes, dass er, egal welche ip, jede Verbidnung annimmt, welche auf dem Port 4000 eintrifft.



      VB.NET-Quellcode

      1. Dim mainthread As Threading.Thread



      Wichitg: In diesem Thread wird der ganze Server laufen. Wenn man den Server ohne Thread macht, dann bleibt die ganze Form bei diesem Code hängen 'Server.AcceptTCPClient'. Also nicht Vergessen, wenn man nicht will, dass seine Form sich Aufhängt^^.





      OK. Jetzt werden wir in dem Sub Event 'Form1_load' den Thread 'mainthread' eine Adresse geben und dann starten:


      VB.NET-Quellcode

      1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      2. mainthread = New Threading.Thread(AddressOf mainserver)
      3. mainthread.Start()
      4. End Sub







      So der Thread startet und führt den Sub
      'mainserver' aus. Jetzt erst mal der ganze sub und danach die Erklärung:



      VB.NET-Quellcode

      1. Sub mainserver()
      2. Try
      3. Server = New TcpListener(ipendpoint)
      4. Server.Start()
      5. client = Server.AcceptTcpClient
      6. stream = client.GetStream
      7. streamr = New StreamReader(stream)
      8. streamw = New StreamWriter(stream) ' Müsste eigentlich alles Klar sein.
      9. While True
      10. Select Case streamr.ReadLine
      11. Case "irgendwas"
      12. streamw.WriteLine("zu irgendwas eine anwort")
      13. streamw.Flush()
      14. Case "...." ' ......
      15. Case "logoff" '........
      16. End Select
      17. End While
      18. Catch
      19. ' Hier wieder eine Fehler behandlung und ein neuen Versuch den Server zu starten...
      20. End Try
      21. End Sub






      Ojeje: Ihre Nachricht ist zu lang. Es stehen maximal 15 000 Zeichen zur Verfügung.

      OK wenn das Forum das so will, folgt der Rest des Tuts unten.^^





      Dieser Beitrag wurde bereits 13 mal editiert, zuletzt von „Malischh“ ()

      2 Teil des Tutorials

      Ok und weiter gehts:








      Fangen wir mal an und Erklären den ganzen Sub der oben gepostet wurde:




      VB.NET-Quellcode

      1. Server = New TcpListener(ipendpoint)


      Mit diesem Code sagen wir dem Server auf welchem Port er Listenen soll. Wir übergeben ihm unsere IPendpoint, die ich oben schon erklärt haben.


      VB.NET-Quellcode

      1. Server.Start()



      Der Server wird gestartet.




      VB.NET-Quellcode

      1. client = Server.AcceptTcpClient



      So. Hier sieht man, dass der TCPListener nur die Verbindungen annimmt. Sobalt eine Verbindung eingeht, wird diese dem Client übergeben. Dieser ist dann zum senden und empfangen da. Wenn keine Verbindung eingeht, wartet das programm genau hier, bis eine eingeht. Deshalb auch der Thread.


      VB.NET-Quellcode

      1. stream = client.GetStream
      2. streamr = New StreamReader(stream)
      3. streamw = New StreamWriter(stream) ' Müsste eigentlich alles Klar sein.



      Das müsste doch klar sein? Wieder zum senden/empfangen...


      VB.NET-Quellcode

      1. While True



      Wozu die Schleife? Ganz einfach: Wenn der Server(Zur Rchtigkeit eigentlich jetzt Client) einen Stream empfangen und einen gesendet hat, sollte er doch wieder auf einen Stream warten. Wenn nicht, wird der Code nur einmal augeführt. Das kann wiederum nützlich sein, aber es kommt wie schon gesagt auf das jeweilige Projekt an.



      VB.NET-Quellcode

      1. Select Case streamr.ReadLine



      Ein Stream wird empfangen und wird mit einer Select case aufgewertet.


      VB.NET-Quellcode

      1. Case "irgendwas"
      2. streamw.WriteLine("zu irgendwas eine anwort")
      3. streamw.Flush()
      4. ......
      5. end select
      6. end while



      Wenn der empfangene Stream "irgendwas" ist, wird "
      zu irgendwas eine anwort" zurüch gesendet. oder man kann auch erst einen Code ausfürhenlassen und dann das Egrebnis zurück senden,....


      Wichtig: Vergesst das .Flush nicht!!!



      Man sollte das hier auch nicht Vergessen:


      VB.NET-Quellcode

      1. Private Sub Form1__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
      2. Server .Stop
      3. Try
      4. mainthread.Abort()
      5. Catch
      6. End Try
      7. End Sub




      Ich hoffe jetzt, dass der normale Server auch klar.







      Damit das Problem mit den 15000 Zeichen nicht nochmal kommt mache ich unten gleich eine neue Antwort, da ich nicht will das ich wie oben mitten in einer Erklärung alles in 2 Spalten muss.

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Malischh“ ()

      Da ich nicht einfach selben Source Code kopieren will, gebe ich euch einfach mal einen Link zu meiner Lieblings WebPage.
      Wenn ihr den nicht versteht, fragt nur und ich werde ihn erklären.

      Darin ist der rest mit UDP Client/Server und wie man Daten verschickt mithilfe von dem UDP Protokoll.

      Meine_Lieblings_HP

      So jetzt habe ich euch einen Teil meines Wissens ans Herz gelegt.^^



      Hier Beispiele

      Achtung die Beispiele sind nicht Komplett!!

      vb-malisch.de Entworfen von Malisch Technology Solutions :thumbup:

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Malischh“ ()

      hey, ich finde dieses Tutorial klasse, nur funktioniert es bei mir nicht ganz.
      Ich habe Server und Client in eine Anwendung gestopft und der User kann Server und/order Client starten.
      Das habe ich in 2 Klassen gemacht.
      Wenn ich nun den Server starte und den Port 4000 einstelle und dann in der gleichen Anwendung den Clienten mit der IP localhost und dem Port 400 starte. Kann ich Nachrichten senden und empfangen. Da funktioniert es wunderbar.
      Nur mein Problem ist. Wenn ich es nun auf anderen Rechnern also Server und Client getrennt habe funktioniert es nciht.
      Dann sagt der Connect (also im Debug modus) das er die zeitbeschränkung überschritten hat.
      Das habe ich mit mehreren IPs von mir durchprobiert aber es hat nie fuktioniert.

      Welche IP muss man denn angeben? Es gibt ja mehrere vorallem wenn man in der cmd ipconfig -all eingibt.

      progglord schrieb:

      per Router ja ;). Hat das irgendwas zu bedeuten?

      Ganz einfach:
      Dein Router blockiert es. Du musst die Ports auf deinen Rechner "forwarden." Alles nähere hierzu, findest du auf einer, meiner Meinung nach sehr guten Seite: Hier
      Da wählst du deinen Router aus, und mit Bildern ist beschrieben, wie du das machst mit dem forwarden der Ports.
      Falls du dabei hilfe brauchst, schreib mir ne PN. ;D

      LG

      Mardcore schrieb:

      Dann Starte den Router mal neu. :)

      Also sorry, aber das ist ein gewaltiger Blödsinn.
      Naja nicht soo ein Blödsinn. Aber neustarten allein bringt nichts. Also zuerst Ports freigeben, dann Router ggf. neustarten ;D
      (danke, kevin89 :D)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „basti2485“ ()

      Malischh schrieb:

      While True

      Malischh schrieb:

      Wozu die Schleife? Ganz einfach: Wenn der Server(Zur Rchtigkeit eigentlich jetzt Client) einen Stream empfangen und einen gesendet hat, sollte er doch wieder auf einen Stream warten. Wenn nicht, wird der Code nur einmal augeführt. Das kann wiederum nützlich sein, aber es kommt wie schon gesagt auf das jeweilige Projekt an.

      Malischh schrieb:

      Visual Basic Quellcode




      1

      Malischh schrieb:

      Select Case streamr.ReadLine

      Malischh schrieb:

      Ein Stream wird empfangen und wird mit einer Select case aufgewertet.

      Malischh schrieb:

      Visual Basic Quellcode




      1
      2
      3
      4
      5
      6
      7
      8
      9
      10

      Malischh schrieb:

      Case "irgendwas"

      Malischh schrieb:

      streamw.WriteLine("zu irgendwas eine anwort")
      streamw.Flush()

      Malischh schrieb:

      ......

      Malischh schrieb:

      end select

      Malischh schrieb:

      end while

      Malischh schrieb:

      Wenn der empfangene Stream "irgendwas" ist, wird "zu irgendwas eine anwort" zurüch gesendet. oder man kann auch erst einen Code ausfürhenlassen und dann das Egrebnis zurück senden,....

      Malischh schrieb:

      Wichtig: Vergesst das .Flush nicht!!!

      Malischh schrieb:

      Man sollte das hier auch nicht Vergessen:

      Malischh schrieb:

      Visual Basic Quellcode




      1
      2
      3
      4
      5
      6
      7

      Malischh schrieb:

      Private Sub Form1__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
      Server .Stop
      Try
      mainthread.Abort()
      Catch
      End Try
      End Sub
      Hallo und guten Tag !
      Ich hoffe das Thema ist noch aktuel.
      Nach lange Suche habe ich es endlich gefunden, ein "Ausführliches TCP und UDP Tutorial" :) ! Bin bisher immer nur auf irgendwelche Code-Fragmente, diese meistens auch noch
      fehlerhaft und kaum dokumentiert, gestossen.
      Da ich, was VB / VB 2008 ein totale Neuling bin (µC programmieren, Assembler, unter DOS mit TurboPascal und so weiter ist ja easy. Aber VB ??? Alles nicht so ganz logisch. Aber vielleicht verwirren auch die viele Objekte, Klasse, Threads und so weiter), hatte ich nun gehofft mit diesem "ausführlichen" Tutorial meine viele Fragen lösen zu können.
      Und dann ? Da wo es dann wirklich spanned wird, da steht dann nur "Achtung, ist nicht vollständig, Code muss angepasst werden" :(
      Also wieder nichts, das man nehmen und ausprobieren kann um zu sehen, was wo wie, wieso und weshalb passiert.
      Generell ein paar Fragen:
      Da gibt eine Schleife "While True ... End While" Aber weclhe Variable(?) wird denn da auf True/False hin geprüft ? Es mag zwar für den Schreiber oder den, der keine Anleitung mehr braucht klar, aber mich verwirrt es sehr, eine Abfrage auf True ohne Angabe was denn True/False sein soll ;)
      Dann "server.close" gibt es das wirklich ? Ich finde in alle Doks nur "server.stop"
      Und warum wird Threading benutzt, wenn aber doch nur ein Thread läuft. Oder sind die anderen irgendwo versteckt ?
      Fragen über Fragen ...

      Vielleicht sollte ich aber einfach mal erklären, was ich machen will. Ist bestimmt so simple, das der eine oder andere sagen wird "Das steht doch da" oder "dafür gibt's doch 1001 Beispiele". Naja, leider ist keines der Beispiel, die gefunden habe wirklich funktionsfähig und da der Verfasser sicher weiss, was er geschrieben hat es er auch nur entsprechend kommentiert.
      Also, es geht um folgendes:
      Ich möchte ein Progrämmchen schreiben, das Daten, die an einem TCP-Port ankommen mitschreibt.
      Im Detail:
      Port soll eingegeben werden können
      Dann soll das Programm warten, bis Daten ankommen. Diese Daten (reiner Text) kommen z.B. per GPRS (Router mit Portforwarding etc. ist ja kein Thema), somit wird
      der PC also als Server arbeiten
      Die Daten sollen dann z.B. in einem Textfeld angezeigt werden und bei Bedarf auch in eine Textdatei geschrieben werden können. Neue Daten
      werden angehängt (append)
      Zunächst nur für eine Client-Server Verbindung, vielleicht später für mehr (10 oder so)
      Kann/muss man nun den Port nach einige Sekunden nach dem die Daten angekommen sind wieder schliessen oder kann man ihn einfach offen lassen,
      auch für die Version mit mehrere Verbindungen ?
      Manche sprehcne von "Port öffnen" andere von "Socket öffnen" etc. Habe noch nicht so ganz verstanden, was der Unterschied sein soll.
      So, das ist es eigentlich.
      Jetzt aber bitte keine Hinweise wie ich sie hier zu anderen Themen im Forum schon gesehen habe wie" Ist doch ganz einfach. Mach ein Form auf, öffne einen Port, mache einen tcplistener und fertig" Das hilft nicht wirklich weiter ;)
      Ich danke schon für die vielen Hilfe und hoffe ich habe gut erklärt, was ich fragen und wissen will. So gut ist mein Deutsch leider noch nicht.

      Vangelis
      Hallo Kevin,
      ich glaube ich habe doch nicht gut erklärt. Ich habe kein Problem mit Firewall, Routern etc. Das ist alles einfach.
      Oder ist Dein Antwort vielleicht nicht für meine Fragen gedacht gewesen ?

      Gruss,
      Vangelis
      Hallo nochmal,
      also es geht wirklich nicht um den Router (in dem Portforwarding eingestellt werden muss, nicht in Server), das ist alles gaaaaanz einfach.

      Hier nochmal meine Frage, scheint irgendwie nicht richtig rüberzukommen
      Also, es geht um folgendes:
      Ich möchte ein Progrämmchen schreiben, das Daten, die an einem TCP-Port ankommen mitschreibt.
      Im Detail:
      Port soll eingegeben werden können
      Dann soll das Programm warten, bis Daten ankommen. Diese Daten (reiner Text) kommen z.B. per GPRS (Router mit Portforwarding etc. ist ja kein Thema), somit wird
      der PC also als Server arbeiten
      Die Daten sollen dann z.B. in einem Textfeld angezeigt werden und bei Bedarf auch in eine Textdatei geschrieben werden können. Neue Daten
      werden angehängt (append)
      Zunächst nur für eine Client-Server Verbindung, vielleicht später für mehr (10 oder so)
      Kann/muss man nun den Port nach einige Sekunden nach dem die Daten angekommen sind wieder schliessen oder kann man ihn einfach offen lassen,
      auch für die Version mit mehrere Verbindungen ?
      Manche sprehcne von "Port öffnen" andere von "Socket öffnen" etc. Habe noch nicht so ganz verstanden, was der Unterschied sein soll.
      So, das ist es eigentlich.
      Jetzt aber bitte keine Hinweise wie ich sie hier zu anderen Themen im Forum schon gesehen habe wie" Ist doch ganz einfach. Mach ein Form auf, öffne einen Port, mache einen tcplistener und fertig" Das hilft nicht wirklich weiter ;)
      Ich danke schon für die vielen Hilfe und hoffe ich habe gut erklärt, was ich fragen und wissen will. So gut ist mein Deutsch leider noch nicht.


      Besten Dank,
      Vangelis

      Vangelis schrieb:

      Zitat von »Malischh«
      Wichtig: Vergesst das .Flush nicht!!!


      Warum? Laut MSDN hat die Methode gar keine Funktion:

      Die Flush-Methode implementiert die Stream.Flush-Methode, wirkt sich jedoch nicht auf Netzwerkstreams aus, da der NetworkStream nicht gepuffert ist.Durch Aufrufen der Flush-Methode wird keine Ausnahme ausgelöst.


      Quelle:
      msdn.microsoft.com/de-de/libra….networkstream.flush.aspx
      wenn AutoFlush = False, dann wird Flush benötigt, ich arbeite zwar normalerweiße mit richtigen Sockets und nicht mit TCPClienten, aber einen Flush benötigt man glaub ich dort schon ;)
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      Ja, aber nur bei der StreamWriter Klasse. Ich verstehe auch nicht, warum der Threadersteller aus dem Networkstream noch die StreamReader/writer erstellt, da Networkstream auch schon eine Read/Write Methode besitzt.