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
Und dann kommt beim Senden ein "mysteriöser" Fehler
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:
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.Net
- Imports System.Threading
- Public Class Form1
- Private SenderSocket As Socket
- Private EmpfnagsSocket As Socket
- Private Const Port As Integer = 5004
- Private Function GetHistIp() As IPEndPoint
- For Each ipa In Dns.GetHostEntry("localhost").AddressList
- If ipa.AddressFamily = AddressFamily.InterNetwork Then
- Return New IPEndPoint(ipa, Port)
- End If
- Next
- Return (New IPEndPoint(IPAddress.IPv6Loopback, Port))
- End Function
- Private EndPoint As IPEndPoint = GetHistIp()
- Dim t2 As New Thread(AddressOf Empfangen)
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- SenderSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
- EmpfnagsSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
- SenderSocket.Bind(EndPoint)
- SenderSocket.Listen(1)
- Dim t1 As New Thread(AddressOf Verbinden)
- t1.Start()
- EmpfnagsSocket = SenderSocket.Accept()
- t2.Start()
- Dim t3 As New Thread(AddressOf Alive)
- t3.Start()
- End Sub
- Private Sub Verbinden()
- EmpfnagsSocket.Connect(EndPoint)
- End Sub
- Private Sub Empfangen()
- Do
- Dim buff(EmpfnagsSocket.ReceiveBufferSize) As Byte
- EmpfnagsSocket.Receive(buff)
- If lb_nachrichten.InvokeRequired Then
- lb_nachrichten.Invoke(New ATLBH(AddressOf AddToLB), System.Text.Encoding.Default.GetString(buff))
- End If
- Loop
- End Sub
- Private Sub AddToLB(ByVal str As String)
- lb_nachrichten.Items.Add(str)
- End Sub
- Private Delegate Sub ATLBH(ByVal str As String)
- Sub Alive()
- If t2.IsAlive = False Then
- t2.Start()
- End If
- End Sub
- Private Sub btn_send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_send.Click
- SenderSocket.Send(System.Text.Encoding.Default.GetBytes(tb_text.Text), System.Text.Encoding.Default.GetBytes(tb_text.Text).Length, SocketFlags.None)
- End Sub
- End Class
Und dann kommt beim Senden ein "mysteriöser" Fehler