Hallo,
ich hoffe mir kann jemand weiter helfen. Ich hab untenstehenden Code im Internet gefunden und möchte diesen gerne weiter ausbauen aber bevor ich das machen kann muss daran etwas gebastelt werden. Das Problem was ich habe ist das die Ausgabe dreimal wieder gegeben wird. Wenn man sich den Code kopiert und 2 Textfelde und eine Button dazu macht und es dann testet passiert folgendes. Gibt man in dem Textfeld txtMensaje etwas ein, drückt dann auf den Button cmdEnviar taucht im zweiten Textfeld txtDatosRecibidos die Eingabe dreimal auf. Was müsste am Code verändert werden damit die Aufgabe aber nur einmal zutrifft. Kann mir da bitte jemand weiter helfen.
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Public Class frmMain
Dim ElSocket As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, _
ProtocolType.Udp)
Dim HiloRecibir As Thread
Dim Saliendo As Boolean = False
Dim DireccIP As String, ContenidoMensaje As String
Private Sub txtMensaje_TextChanged(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles txtMensaje.TextChanged
cmdEnviar.Enabled = (txtMensaje.TextLength > 0)
End Sub
Private Sub cmdEnviar_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles cmdEnviar.Click
Dim DirecciónDestino As New IPEndPoint(IPAddress.Broadcast, 20145)
Dim DatosBytes As Byte() = Encoding.Default.GetBytes(txtMensaje.Text)
ElSocket.SendTo(DatosBytes, DatosBytes.Length, SocketFlags.None, _
DirecciónDestino)
txtMensaje.Clear()
txtMensaje.Focus()
End Sub
Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As _
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Saliendo = True
ElSocket.Close()
HiloRecibir.Abort()
End Sub
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles Me.Load
ElSocket.Bind(New IPEndPoint(IPAddress.Any, 20145))
ElSocket.SetSocketOption(SocketOptionLevel.Socket, _
SocketOptionName.Broadcast, True)
HiloRecibir = New Thread(AddressOf RecibirDatos)
HiloRecibir.Start()
End Sub
Private Sub RecibirDatos()
Do
Dim LaIPRemota As New IPEndPoint(IPAddress.Any, 0)
Dim IPRecibida As EndPoint = CType(LaIPRemota, EndPoint)
Dim RecibirBytes(255) As Byte
Dim Datos As String = ""
Try
ElSocket.ReceiveFrom(RecibirBytes, RecibirBytes.Length, _
SocketFlags.None, IPRecibida)
Datos = Encoding.Default.GetString(RecibirBytes)
Catch ex As SocketException
If ex.ErrorCode = 10040 Then
Datos &= "[truncado]"
Else
MsgBox("Error '" & ex.ErrorCode.ToString & "' " & _
ex.Message, MsgBoxStyle.Critical, "Error al recibir" & _
"datos")
End If
End Try
LaIPRemota = CType(IPRecibida, IPEndPoint)
DireccIP = LaIPRemota.Address.ToString
ContenidoMensaje = Datos.ToString
txtDatosRecibidos.Invoke(New EventHandler(AddressOf _
ActualizarTextoMensaje))
Loop Until Saliendo
End Sub
Private Sub txtDatosRecibidos_TextChanged(ByVal sender As Object, ByVal e _
As System.EventArgs) Handles txtDatosRecibidos.TextChanged
txtDatosRecibidos.SelectionStart = txtDatosRecibidos.TextLength
txtDatosRecibidos.ScrollToCaret()
End Sub
Protected Sub ActualizarTextoMensaje(ByVal sender As Object, ByVal e As _
System.EventArgs)
If txtDatosRecibidos.TextLength = 0 Then
txtDatosRecibidos.Text = DireccIP & ">" & ContenidoMensaje
Else
txtDatosRecibidos.Text &= vbCrLf & DireccIP & ">" & ContenidoMensaje
End If
End Sub
End ClassPösö: Die Namensvergabe der Textfelden stamme nicht aus meiner Feder. Wie schon gesagt, ein Fund aus dem Internet. |