Ausführliches TCP und UDP Tutorial

    • VB.NET

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

      tolle Fehlerbeschreibung...

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


      While True

      Select Case streamr.ReadLine

      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^^
      streamw.WriteLine("ok") ' Achtung! ist nicht Vollständig!

      das ist der Server, über streamr.... werden die Daten empfangen und über streamw... gesendet...wo ist das Problem?


      Sub client_send(ByVal text As String)
      streamw.WriteLine(text)
      streamw.Flush()
      End Sub



      Function client_recieve() As String
      client_recieve = streamr.ReadLine
      End Function

      der Client kann ebenfalls Senden und Empfangen...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      genau das kann man hier auch machen, du musst nur noch beim Server Programm machen, dass die Benutzereingaben gesendet werden und das ganze nicht wie hier Automatisch abläuft...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---

      3 Fehler in TpcClient

      Hallo,
      im TpcClient bekomm ich 3 Fehler:
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Button1 wird geclickt
      Client.Connect(IP, Port) 'Client verbindet sich mit IP: 192.168.111.17 und Port 4000
      If Client.Connected Then
      stream = Client.GetStream ' Stream wird auf Client verwiesen
      streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert
      streamr = New StreamReader(stream) ' Stream zum Empfangen wird deklariert
      login() ' Sub Login
      Else
      MsgBox("Verbidnung konnte nicht mit " & IP & " aufgebaut werden!")
      End If
      1. Client.Connect(IP, Port):
      Eigenschaftenzugriff muss der Eigenschaft zugewiesen werden oder deren Wert verwenden.
      2. Client.Connected:
      "Connected" ist kein Member von "WindowsApplication1.TcpClient".
      3. Client.GetStream:
      "GetStream" ist kein Member von "WindowsApplication1.TcpClient".

      kann mir jemand helfen

      mfg gerry
      ja hab ich alles gemacht hie mein ganzer code:

      VB.NET-Quellcode

      1. Imports System.IO
      2. Imports System.Net
      3. Imports System.Net.Sockets
      4. Public Class TcpClient
      5. Dim stream As NetworkStream
      6. Dim streamw As StreamWriter
      7. Dim streamr As StreamReader
      8. Dim client As New TcpClient
      9. Dim port As Integer = 5674
      10. Private Sub Connect_Click() Handles Connect.Click
      11. Try
      12. client.Connect(TextBox1.Text, port)
      13. If client.Connected Then
      14. stream = client.GetStream
      15. streamw = New StreamWriter(stream)
      16. streamr = New StreamReader(stream)
      17. Label2.Visible = True
      18. TextBox2.Visible = True
      19. send.Visible = True
      20. Else
      21. End If
      22. Catch ex As SocketException
      23. MsgBox("Verbidnung konnte nicht mit " & ip & " aufgebaut werden!")
      24. End Try
      25. End Sub
      26. Sub client_send(ByVal text As String)
      27. streamw.WriteLine(text)
      28. streamw.Flush()
      29. End Sub
      30. Function client_recieve() As String
      31. client_recieve = streamr.ReadLine
      32. End Function
      33. Private Sub send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles send.Click
      34. client_send(TextBox2.Text)
      35. End Sub
      36. End Class
      Ich habe das Problem, das der Client nichts Empfängt. Wenn ich darau warte, dann stürzt die Anwendung ab, weil er nichts empfängt. Doch der Server Empfängt und Verschickt etwas.
      Das Senden beim Clients funktioniert auch. Eigentlich wollte ich das so machen, das beim Client Automatisch nach einer neuen Nachricht überprüft wird aber das habe ich auch nicht hinbekommen.
      also ich hab das jetzt auch mal ausprobiert und bei mir funktioniert es nicht so wirklich. Der Server scheint zu funktionierten. Zumindestens kommt da keine Fehlermeldung. Aber beim Clienten kommt immer wieder die Meldung dass er nicht mitm Server verbinden kann.
      Ich habe zwei PCs direkt per Kabel verbunden also keine Firewall, kein Router rein gar nix dazwischen. Aber selbst wenn ich Server und Client aufm gleichen Rechner starte und dann mit der IP 127.0.0.1 Verbinden will, funktioniert es nicht.
      Standartport ist bei mir 5000 und IP 192.168.0.55

      hier mal meinen Code:

      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
      10. Dim Port As Integer
      11. '_________________
      12. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdVerbinden.Click
      13. Client.Connect(IP, Port) 'Client verbindet sich 'Hier tritt dann die Fehlermeldung auf
      14. If Client.Connected Then
      15. stream = Client.GetStream ' Stream wird auf Client verwiesen
      16. streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert
      17. streamr = New StreamReader(stream) ' Stream zum Empfangen wird deklariert
      18. cmdVerbinden.Enabled = False
      19. cmdSenden.Enabled = True
      20. Else
      21. MsgBox("Verbidnung konnte nicht mit " & IP & " aufgebaut werden!")
      22. End If
      23. End Sub
      24. Sub client_send(ByVal text As String)
      25. streamw.WriteLine(text)
      26. streamw.Flush()
      27. End Sub
      28. Function client_recieve() As String
      29. client_recieve = streamr.ReadLine
      30. End Function
      31. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      32. IP = txtIP.Text
      33. Port = CInt(txtPort.Text)
      34. End Sub
      35. Private Sub cmdSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSpeichern.Click
      36. IP = txtIP.Text
      37. Port = CInt(txtPort.Text)
      38. End Sub
      39. 'Client Starten wenn Button geklickt wurde
      40. Private Sub cmdSenden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSenden.Click
      41. client_send(txtVersand.Text)
      42. txtEmpfang.Text = txtEmpfang.Text & vbCrLf & "Versenden: " & txtVersand.Text
      43. txtVersand.Text = ""
      44. txtEmpfang.Text = txtEmpfang.Text & vbCrLf & "Empfangen: " & client_recieve()
      45. End Sub
      46. Private Sub cmdBeenden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBeenden.Click
      47. Client.Close()
      48. Me.Close()
      49. End Sub
      50. End Class


      Server:

      VB.NET-Quellcode

      1. Imports System.Net
      2. Public Class Form1
      3. 'Variablen:
      4. Dim stream As NetworkStream
      5. Dim streamw As StreamWriter
      6. Dim streamr As StreamReader
      7. Dim Server As TcpListener
      8. Dim client As New TcpClient
      9. Dim Port As Integer
      10. Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, Port)
      11. Dim mainthread As Threading.Thread
      12. '______________
      13. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      14. Port = CInt(txtPort.Text)
      15. End Sub
      16. Sub mainserver()
      17. Try
      18. Server = New TcpListener(ipendpoint)
      19. Server.Start()
      20. client = Server.AcceptTcpClient
      21. stream = client.GetStream
      22. streamr = New StreamReader(stream)
      23. streamw = New StreamWriter(stream) ' Müsste eigentlich alles Klar sein.
      24. Catch
      25. txtEmpfang.Text = txtEmpfang.Text & vbCrLf & "Fehler: " & "Server konnte nicht gestartet werden" & vbCrLf ' Hier wieder eine Fehler behandlung und ein neuen Versuch den Server zu starten...
      26. End Try
      27. 'Empfangen:
      28. txtEmpfang.Text = txtEmpfang.Text & vbCrLf & "Empfangen: " & streamr.ReadLine
      29. End Sub
      30. Private Sub Form1__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
      31. Server.Stop()
      32. Try
      33. mainthread.Abort()
      34. Catch
      35. End Try
      36. End Sub
      37. Private Sub cmdSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSpeichern.Click
      38. Port = CInt(txtPort.Text)
      39. End Sub
      40. 'Text Senden wenn Button geklickt wurde
      41. Private Sub cmdVersand_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdVersand.Click
      42. streamw.WriteLine(txtVersand.Text)
      43. txtEmpfang.Text = txtEmpfang.Text & vbCrLf & "Versenden: " & txtVersand.Text
      44. txtVersand.Text = ""
      45. End Sub
      46. Private Sub cmdBeenden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBeenden.Click
      47. Me.Close()
      48. End Sub
      49. 'Server Starten wenn Button geklickt wurde
      50. Private Sub cmdStarten_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStarten.Click
      51. txtEmpfang.Text = txtEmpfang.Text & vbCrLf & "Fehler: " & "Serverasdads " & vbCrLf
      52. mainthread = New Threading.Thread(AddressOf mainserver)
      53. mainthread.Start()
      54. cmdStarten.Enabled = False
      55. cmdVersand.Enabled = True
      56. End Sub
      57. End Class
      Hallo,
      ich arbeite aktuell an einer Verbindung zwischen ASP.net-Seite und Programm. Die Seite dient dabei als Client, das Programm als Server (IP ist auf HP eintragbar) - Wenn man auf der Homepage einen Text eingibt und auf absenden klickt, kommt beim Programm der Text auch richtig an, allerdings nur einmal (egal ob die HP von einer Person oder mehreren aufgerufen wird, IP wechselt also nicht). Beim zweiten oder dritten Mal kommt der Text nicht mehr bis zum Programm, das muss dann neugestartet werden.
      Das wäre wohl ein Fall für den Multiserver, allerdings ist das Tutorial davon offline und deshalb nichtmehr auffindbar.
      Was gibt es denn für großartige Änderungen zwischen diesem und einem Multiserver?

      Mit freundlichen Grüßen
      Padarom
      Hallo Community,

      ich bin auf dieses thema gestoßen und habe jetzt auch schon google bemüht nach einen Multiserver
      wie diesem hier, aber leider habe ich dort auch nichts passendes gefunden.

      Könnte mir bitte einer erklären wie ich das beispiel zu einen Multiserver umprogrammiere bzw.
      mir einen Code zeigen dafür.

      Ich möchte diesen Code dazu nutzen um einen Login Server für ein Programm zu nutzen.

      Ich hoffe ich werde hier geholfen,
      da ich schon auch auf 2 weitere Webseiten nachgefragt hatte,
      aber da bekommt man als Neuling leider nur dumme antworten bzw. erst keine antwort.
      du bekommst per AcceptTCPClientjeweils einen Clienten, also füge diesen einer Liste hinzu...
      Zum empfangen werden eh die Streams der jeweiligen TCPClienten aus dieser Liste verwendet, also sind diese sozusagen bereits zugeordnet...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      Hi, ich hab da mal ne Frage zu dem Client.

      Ich hab mir einen TCP-Server in C gebastelt. Dieser läuft auch gut.
      Als Client nutze ich dieses Beispiel. Ich kann auch verbinden und Nachrichten senden. Nur wenn ich mit den Client Disconnecte und wieder Connecten will, bekomme ich die Fehlermeldung:

      Quellcode

      1. Auf das verworfene Objekt kann nicht zugegriffen werden. Objektname: "System.Net.Sockets.TcpClient".


      Ist das .Close der Verbindung wirklich die richtige Methode diese zu beenden? Denn die Beschreibung lautet: "Verwirft diese System.Net.Socket.TcpClient-Instanz, ohne die zugrunde liegene Verbindung zu schließen."

      Erst wenn ich die Anwendung neustarte, geht der Connect wieder...

      Edit:
      Habe auch grade noch bemerkt, das sobald ich die Daten auslesen will, sich das Programm aufhängt...
      Es läuft erst wieder, wenn ich den Server stoppe. Aber Daten kommen keine an, obwohl ich welche mit printf() ausgebe.

      Für Hilfe wäre ich sehr dankbar.
      wintoolz.de
      • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
      • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
      • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

      Benutze auch du Ecosia

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

      Hi, ich habe jetzt wie oben den Code übernommen, einmal ein Projekt für den Client und ein Projekt für den Listener, Der Client bleibt allerdings bei

      VB.NET-Quellcode

      1. Function client_recieve() As String
      2. client_recieve = streamr.ReadLine
      3. End Function

      hängen

      als ip hab ich 127.0.0.1 eingetragen