Socket-Problem

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Dodo.

    Socket-Problem

    Hallo ich bin ziemlich neu in der Programmierung mit Sockets und komm einfach nicht weiter.
    Es soll eine Art Chat werden, wo der Benutzer der gerade eine Nachricht gesendet hat, eben auch seine Nachricht sieht.
    (So wies bei Skype & Co. ist.)
    Aus Beispielprojekten und Tut's hab ich mir folgenden Code zusammengebastelt:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.Net
    3. Imports System.Threading
    4. Public Class Form1
    5. Private SenderSocket As Socket
    6. Private EmpfnagsSocket As Socket
    7. Private Const Port As Integer = 5004
    8. Private Function GetHistIp() As IPEndPoint
    9. For Each ipa In Dns.GetHostEntry("localhost").AddressList
    10. If ipa.AddressFamily = AddressFamily.InterNetwork Then
    11. Return New IPEndPoint(ipa, Port)
    12. End If
    13. Next
    14. Return (New IPEndPoint(IPAddress.IPv6Loopback, Port))
    15. End Function
    16. Private EndPoint As IPEndPoint = GetHistIp()
    17. Dim t2 As New Thread(AddressOf Empfangen)
    18. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    19. SenderSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    20. EmpfnagsSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    21. SenderSocket.Bind(EndPoint)
    22. SenderSocket.Listen(1)
    23. Dim t1 As New Thread(AddressOf Verbinden)
    24. t1.Start()
    25. EmpfnagsSocket = SenderSocket.Accept()
    26. t2.Start()
    27. Dim t3 As New Thread(AddressOf Alive)
    28. t3.Start()
    29. End Sub
    30. Private Sub Verbinden()
    31. EmpfnagsSocket.Connect(EndPoint)
    32. End Sub
    33. Private Sub Empfangen()
    34. Do
    35. Dim buff(EmpfnagsSocket.ReceiveBufferSize) As Byte
    36. EmpfnagsSocket.Receive(buff)
    37. If lb_nachrichten.InvokeRequired Then
    38. lb_nachrichten.Invoke(New ATLBH(AddressOf AddToLB), System.Text.Encoding.Default.GetString(buff))
    39. End If
    40. Loop
    41. End Sub
    42. Private Sub AddToLB(ByVal str As String)
    43. lb_nachrichten.Items.Add(str)
    44. End Sub
    45. Private Delegate Sub ATLBH(ByVal str As String)
    46. Sub Alive()
    47. If t2.IsAlive = False Then
    48. t2.Start()
    49. End If
    50. End Sub
    51. Private Sub btn_send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_send.Click
    52. SenderSocket.Send(System.Text.Encoding.Default.GetBytes(tb_text.Text), System.Text.Encoding.Default.GetBytes(tb_text.Text).Length, SocketFlags.None)
    53. End Sub
    54. End Class



    Und dann kommt beim Senden ein "mysteriöser" Fehler :cursing:
    Dateien
    • ChatEnglie.zip

      (67,4 kB, 37 mal heruntergeladen, zuletzt: )
    Es gibt doch mittlerweile soooo viele Thread und sogar min 2 oder 3 Tutorials zu einer TCP Verbindung und bei einer weiß ich ist schon halber MultiConnection Chat ähnlich.

    PS: und mach nicht solche endlosen Zeilen, ich steh zwar auch auf möglich wenige Variablennutzung wenn es unnötig ist, aber beim Konvertieren macht das aufjedenfall KEINEN Sinn, da bei dir die Konvertierung 2-Mal ausgeführt wird und das kostet definitiv mehr Zeit als nötig.

    VB.NET-Quellcode

    1. Dim buffer As Byte() = Encoding.GetBytes("text")
    2. Stream.Write(buffer, 0, buffer.length)