[VB.NET] Sockets Peer to Peer

Diskutiere [VB.NET] Sockets Peer to Peer im Developer Network Forum im Bereich Hardware & Software Forum; Hi, Ich habe mir mal einen Code zusammen gebastelt für ein Peer to Peer Chat in VB.NET, leider funktioniert dieser nur auf dem eigenden Rechner...
  • [VB.NET] Sockets Peer to Peer Beitrag #1
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Hi,

Ich habe mir mal einen Code zusammen gebastelt für ein Peer to Peer Chat in VB.NET, leider funktioniert dieser nur auf dem eigenden Rechner, vielleicht noch im Internen Netzwerk. Im WWW definitiv nicht. Ich weiß nicht wodran das liegt, vielleicht könnte einer von euch mir den Fehler sagen?! Hier ist mein Code:

Code:
' Textbox1 = IP
' Textbox2 = zu sender Text
' Textbox3 = Empfangender Text
' 1 Timer Enabeld = True, Interval = 1
' Button1 = Sende Text


Imports System.Net.Sockets
Imports System.Threading
Imports System.IO

Public Class Form1
    Dim Listener As New TcpListener(5151)
    Dim Client As TcpClient
    Dim Mesage As String = ""

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Listener.Stop()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Listthread As New Thread(New ThreadStart(AddressOf listening))
        Listthread.Start()
    End Sub

    Private Sub listening()
        Listener.Start()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Client = New TcpClient(TextBox1.Text, 5151)
        Dim writer As New StreamWriter(Client.GetStream)

        writer.Write(TextBox2.Text)
        writer.Flush()
        TextBox2.Text = ""
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Listener.Start()
        If Listener.Pending = True Then
            Mesage = ""
            Client = Listener.AcceptTcpClient
            Dim Reader As New StreamReader(Client.GetStream)
            While Reader.Peek > -1
                Mesage = Mesage + Convert.ToChar(Reader.Read()).ToString
            End While
            TextBox3.Text = TextBox3.Text & Mesage & vbCrLf
        Else : End If
    End Sub
End Class

Freue mich auf antworten
24
 
  • [VB.NET] Sockets Peer to Peer Beitrag #2
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Wenn das lokal funktioniert, dann liegt es mit ziemlicher Sicherheit an einer Firewall, oder zwischen einem der PCs und dem Internet hängt ein Router, bei dem kein passendes Port-Forwarding eingerichtet ist. Am Code liegts jedenfalls mit ziemlicher Sicherheit nicht.
 
  • [VB.NET] Sockets Peer to Peer Beitrag #3
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Hi,

danke für die schnelle Antwort gibt es den Befehle oder eine andere Technik, mit denen man die Portweiterleitung umgehen kann? Ich wollte eigentlich nicht das der User des Programms das machen muss.

Gruß
24
 
  • [VB.NET] Sockets Peer to Peer Beitrag #4
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Da gibt es leider nicht wirklich was zuverlässiges. Die einfachste Variante ist es, einen Server zu erstellen, zu dem alle Clients hinverbinden. Dann muss kein Client eine eingehende Verbindung akzeptieren. Weiters gibt es noch UPnP, ein Protokoll, mit dem man Netzwerkgeräte konfigurieren kann. Das muss allerdings vom Router unterstützt werden und eingeschaltet sein. Da das ein gewisses Sicherheitsrisiko darstellt, ist es das oft nicht.
Spiele verwenden anscheinend auch noch etwas namens NAT-Punch-Through; das scheint allerdings was recht spezielles zu sein und muss wohl für jeden Router zugeschnitten sein.

Die Sache beim PC ist wie beim Auto: In gewissen Grenzen muss der User selber damit umgehen können. Nur beim PC will das keiner wahr haben. :D
 
  • [VB.NET] Sockets Peer to Peer Beitrag #5
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Wenn ich das jetzt richtig verstehe gibt es als einzige _gute_ Lösung einen Server zu erstellen zu dem jeder verbindet. Mit dem Server wäre das ganze Problem dann gelöst? Sprich ich kann dann über den Server auch Daten zu einem Client schicken der hinter einem Router sitzt?

Gruß
24
 
  • [VB.NET] Sockets Peer to Peer Beitrag #6
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Jepp, aber die Verbindung muss vom Client in Richtung Server aufgebaut werden. Sobald die steht, ist der Datenaustausch in beide Richtungen problemlos möglich. Auf die Art funktionieren ICQ etc.

Der Server muss dann natürlich von außen zu erreichen sein, also eine statische IP-Adresse oder zumindest einen dynamischen DNS-Eintrag haben. Und dort muss auch der Router entsprechend eingestellt sein.
 
  • [VB.NET] Sockets Peer to Peer Beitrag #7
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Das ist klar, dankeschön für die Antworten! Ich werde dann einen Server schreiben und ihn hier posten für diehenigen die ihn sich abkupfern wollen.

Gruß
DieVar
 
  • [VB.NET] Sockets Peer to Peer Beitrag #8
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Hallo,

Der Server (multi Verbindeingstauglich) ist fertig, leider kann immer noch keiner zu mir verbinden trotz Prot weiterleitung. Ich poste hier einfach mal den Server vielleicht stellt ihr ja einen Fehler fest. Außerdem habe ich probleme beom Kompilen bzw ausführen des Servers, immer wenn ich auf den grünen Knopf drücke erscheint kein Fenster. Des weiteren hab ich Probleme wenn ich Server oder Client starten will, dann kommt erst eine Fehler Meldung bevor ich zum Programm komme.

Hier der Server Code (Beispielcode war für Konsolen anwendung deshalb vielleicht unschön geworden):

Code:
' Textbox1.Text = Log

Imports System.Net.Sockets
Imports System.IO
Imports System.Threading

Public Class Form1
    Dim TCP_Listener As New TcpListener(5151)
    Dim ChatClientListe As New List(Of ChatClaient)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TCP_Listener.Start()

        While True
            Dim TCP_Client As New TcpClient
            TCP_Client = TCP_Listener.AcceptTcpClient
            TextBox1.Text = TextBox1.Text & "Client has connected"
            Dim Client_C As New ChatClaient
            Client_C.Stream_Writer = New StreamWriter(TCP_Client.GetStream)
            Client_C.Stream_Reader = New StreamReader(TCP_Client.GetStream)
            Client_C.Start()
            ChatClientListe.Add(Client_C)
        End While
    End Sub

    Class ChatClaient
        Public Stream_Reader As StreamReader
        Public Stream_Writer As StreamWriter


        Public Sub Start()
            Dim EmpfangenThread As New Thread(AddressOf Empfangen)
            EmpfangenThread.IsBackground = True
            EmpfangenThread.Start()
        End Sub

        Private Sub Empfangen()
            Dim ChatClientListe As New List(Of ChatClaient)
            Dim Textbox1 As New TextBox
            While True
                Try
                    Dim Empfang As String = Stream_Reader.ReadLine
                    TextBox1.Text = TextBox1.Text & Empfang
                    For Each c As ChatClaient In ChatClientListe
                        c.Senden(Empfang)
                    Next
                Catch ex As Exception

                End Try
            End While
        End Sub

        Public Sub Senden(ByVal text)
            Try
                Stream_Writer.WriteLine(text)
                Stream_Writer.Flush()
            Catch ex As Exception
            End Try
        End Sub
    End Class
End Class


Hier sind noch Screenshots von den Errors die ich bekomme wenn ich ein Programm starten will:

Client




Server:



Beste Grüße
24
 
  • [VB.NET] Sockets Peer to Peer Beitrag #9
fox99

fox99

Bekanntes Mitglied
Dabei seit
27.11.1999
Beiträge
3.948
Reaktionspunkte
27
Ort
Omicron Persei 8
mal ein paar ideeen:
  • der port 5151 ist noch von einem vorherigen start belegt und wurde nicht wieder freigegeben. (sollte das os irgendwann automatisch machen können, kann aber etwas dauern)
  • du hast im form_load eine unendliche schleife. wird vielleicht das form erst angezeigt wenn form_load durchlaufen wurde?
  • kannst du die while-schleife in einem anderen thread ausführen? so blockiert das AcceptTcpClient nicht deinen mainthread und die gui bleibt bedienbar

du könntest auch im internet nach einem chat-server/-client beispiel suchen. das ist nämlich so ein standardbeispiel, wenn man anfängt mit der netzwerkprogrammierung
 
  • [VB.NET] Sockets Peer to Peer Beitrag #10
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Zu Punkt 1: Das kann natürlich sein, ich guck demnächst immer in der Console nach.
Zu Punkt 2 & 3: Ich lagere das mal aus.
Zu Punkt 4: Genau das habe ich gemacht, trotzdem danke. ich denke aber das ich es mit diesem Beispiel schaffen werde :)

Fragen:
Wie kann ich den unter Windows XP den Port wieder freigeben?
 
  • [VB.NET] Sockets Peer to Peer Beitrag #11
fox99

fox99

Bekanntes Mitglied
Dabei seit
27.11.1999
Beiträge
3.948
Reaktionspunkte
27
Ort
Omicron Persei 8
du rufst am TcpListener start() auf. schau mal obs sowas wie close(), stop(),... gibt.
 
  • [VB.NET] Sockets Peer to Peer Beitrag #12
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Das Problem ist, du kannst nicht einfach Code aus einem Beispiel für die Konsole in eine Ereignisprozedur eines GUI-Programms packen.
Hab mal was als Beispiel zusammengebastelt; sollte relativ selbsterklärend sein, aber ist sicher nicht ganz sauber geschrieben.
Eine Kleinigkeit: Die Prüfung, ob ein Socket verbunden ist, gibt nur das Ergebnis vom letzten Schreib- oder Lesevorgang wieder. D.h. wenn ein Client disconnectet, dann bleibt er trotzdem in der Liste, bis ein anderer etwas schreibt. Anscheinend muss zweimal was geschrieben werden, bevor er aus der Liste verschwindet; da hab ich jetzt nicht mehr genauer nachgeforscht, was der Grund ist.

Code:
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading


Public Class Form1
    Private mPort As Integer    
    Private mListenerThread As Thread = Nothing

    Private mClients As New List(Of ConnectedClient)

    Public Delegate Sub ReceiveDelegate(ByRef c As ConnectedClient, ByVal s As String)

    Private Sub ButtonStartStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonStartStop.Click
        If mListenerThread Is Nothing Then
            Integer.TryParse(TextBoxPort.Text, mPort)

            mListenerThread = New Thread(AddressOf ListenerFunction)
            mListenerThread.Start(mPort)

        Else
            For Each Client As ConnectedClient In mClients
                Client.Close()                
            Next
            mClients.Clear()

            mListenerThread.Abort()
            mListenerThread.Join()
            mListenerThread = Nothing
        End If
    End Sub

    Private Sub ListenerFunction(ByVal Parameter As Object)
        Dim Listener As TcpListener = Nothing

        Try
            Listener = New TcpListener(New IPAddress(New Byte() {127, 0, 0, 1}), mPort)
            Listener.Start()

            While True
                While Listener.Pending
                    Dim Client As TcpClient = Listener.AcceptTcpClient()
                    mClients.Add(New ConnectedClient(Client, AddressOf Receive))
                End While

                Thread.Sleep(100)
            End While

        Catch ex As ThreadAbortException

        Catch ex As Exception
            Debug.Print("TcpListener Error:" + Environment.NewLine + ex.ToString)
        Finally
            If Listener IsNot Nothing Then
                Listener.Stop()
            End If
        End Try
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Client As ConnectedClient

        If mListenerThread IsNot Nothing Then
            If mListenerThread.IsAlive() Then
                LabelStatus.Text = "Listening on Port " + mPort.ToString
            Else
                LabelStatus.Text = "Stopped."
            End If
        Else
            LabelStatus.Text = "Stopped."
        End If

        ListBoxClients.Items.Clear()
        For Each Client In mClients
            If Client.Connected Then
                ListBoxClients.Items.Add(Client)
            End If
        Next

        Dim removeClient As ConnectedClient = Nothing
        Do
            removeClient = Nothing

            For Each Client In mClients
                If Not Client.Connected Then
                    removeClient = Client
                    Exit For
                End If
            Next

            If removeClient IsNot Nothing Then
                removeClient.Close()
                mClients.Remove(removeClient)
                Debug.Print("Removed Client from  List - Timer")
            End If

        Loop While removeClient IsNot Nothing
        removeClient = Nothing

    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        mClients.Clear()

        If mListenerThread IsNot Nothing Then
            mListenerThread.Abort()
            mListenerThread.Join()
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Receive(ByRef c As ConnectedClient, ByVal s As String)
        If RichTextBoxHistory.InvokeRequired Then
            Dim d As New ReceiveDelegate(AddressOf Receive)
            RichTextBoxHistory.Invoke(d, New Object() {c, s})
        Else
            RichTextBoxHistory.AppendText(c.RemoteHost + ": " + c.RemotePort.ToString + " : " + s)
            RichTextBoxHistory.AppendText(Environment.NewLine)
            RichTextBoxHistory.SelectionStart = RichTextBoxHistory.TextLength
            RichTextBoxHistory.ScrollToCaret()

            For Each client As ConnectedClient In mClients
                If client.Connected Then
                    client.SendString(c.RemoteHost + ": " + c.RemotePort.ToString + " : " + s)
                End If
            Next
        End If


    End Sub
End Class

Public Class ConnectedClient
    Private mClient As TcpClient = Nothing
    Private mThread As Thread
    Private mReceiveFunc As Form1.ReceiveDelegate

    Private mStream As Sockets.NetworkStream = Nothing

    Public ReadOnly Property Connected() As Boolean
        Get
            If mClient Is Nothing Then Return False

            Return mClient.Connected
        End Get
    End Property

    Public ReadOnly Property RemoteHost() As String
        Get
            If mClient Is Nothing Then Throw New Exception("Not Connected.")
            Return CType(mClient.Client.RemoteEndPoint, IPEndPoint).Address.ToString()
        End Get
    End Property

    Public ReadOnly Property RemotePort() As Integer
        Get
            If mClient Is Nothing Then Throw New Exception("Not Connected.")
            Return CType(mClient.Client.RemoteEndPoint, IPEndPoint).Port
        End Get
    End Property

    Public Sub New(ByRef Client As TcpClient, ByVal ReceiveFunc As Form1.ReceiveDelegate)
        mClient = Client
        mStream = mClient.GetStream()
        mReceiveFunc = ReceiveFunc

        mThread = New Thread(AddressOf ThreadFunc)
        mThread.Start()
    End Sub

    Private Sub ThreadFunc()       

        mClient.NoDelay = True

        Try
            mReceiveFunc(Me, "connected.")

            While mClient.Connected


                Try
                    Dim i As Integer
                    i = mClient.Client.Available
                    If i > 0 Then
                        Dim b(i) As Byte

                        mClient.GetStream().Read(b, 0, i)
                        mReceiveFunc(Me, System.Text.Encoding.ASCII.GetString(b))

                    End If
                Catch ex As Exception
                    If ex.InnerException IsNot Nothing Then
                        If ex.InnerException.GetType() Is GetType(SocketException) Then
                            Debug.Print("Socket Error. " + ex.Message)
                        End If
                    End If
                End Try

                Thread.Sleep(100)
            End While

            Debug.Print("Disconnected ThreadFunc")

        Catch ex As ThreadAbortException

        Catch ex As Exception
            Debug.Print("ConnectedClient Error:" + Environment.NewLine + ex.ToString)
        Finally

        End Try
    End Sub

    Public Sub SendString(ByVal s As String)
        If mClient Is Nothing Then Throw New Exception("Not Connected.")
        Dim b() As Byte = System.Text.Encoding.ASCII.GetBytes(s)

        If mClient IsNot Nothing Then
            If mClient.Connected And mClient.GetStream().CanWrite() Then
                Try
                    mStream.Write(b, 0, b.Length)
                Catch ex As Exception
                    Debug.Print("Socket Write Error. " + ex.Message)
                    Close()
                End Try

            End If
        End If
    End Sub

    Public Sub Close()
        If mThread IsNot Nothing Then
            mThread.Abort()
            mThread.Join()
        End If

        If mClient IsNot Nothing Then
            mClient.Close()
            mClient = Nothing
        End If
    End Sub

    Protected Overrides Sub Finalize()
        Close()
    End Sub

    Public Overrides Function ToString() As String
        If Connected Then
            Return RemoteHost + ": " + RemotePort.ToString
        Else
            Return "Not connected."
        End If

    End Function

End Class
 
  • [VB.NET] Sockets Peer to Peer Beitrag #13
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Hi, danke für die antworten!

Ein neues Problem, der Client freezed ein. Soll heißen wenn der Client zu mir connecten will (Ich hab den Port weitergeleitet, den Server angehabt, in die Textbox den Port eingegebn) gibt der Client irgendwann keine Rückmeldung mehr.

Woran kann das nun liegen?

Gruß
24
 
  • [VB.NET] Sockets Peer to Peer Beitrag #14
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Also meiner schon ;)
Code:
Imports System.Net
Imports System.Net.Sockets
Imports System.IO

Public Class Form1
    Private mClient As TcpClient = Nothing
    'Private mStream As NetworkStream = Nothing
    Private mWriter As StreamWriter
    'Private mReader As StreamReader


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub ButtonConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonConnect.Click
        'Try
        If mClient Is Nothing Then
            mClient = New TcpClient(New IPEndPoint(New IPAddress(New Byte() {127, 0, 0, 1}), 0))
            mClient.Connect(TextBoxIPAddress.Text, Convert.ToInt32(TextBoxPort.Text))
            mWriter = New StreamWriter(mClient.GetStream)
            'mReader = New StreamReader(mClient.GetStream)
        Else
            'mClient.Client.Close()            

            mWriter.Close()
            'mClient.Client.Disconnect(False)
            mClient.Close()

            mWriter = Nothing
            mClient = Nothing
        End If

        'Catch ex As Exception
        '    Debug.Print("Connect failed: " + ex.ToString)

        'End Try
    End Sub

    Private Sub ButtonSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSend.Click
        If mClient.Connected And mWriter IsNot Nothing Then
            Try
                'Dim b() As Byte = System.Text.Encoding.ASCII.GetBytes(TextBoxSend.Text)
                mWriter.Write(TextBoxSend.Text)
                mWriter.Flush()
                'mStream.Write(b, 0, b.Length)

                TextBoxSend.Text = ""
                TextBoxSend.Focus()
            Catch ex As Exception

            End Try
        End If
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim i As Integer

        If mClient IsNot Nothing Then
            If mClient.Connected Then
                LabelStatus.Text = "Connected"

                i = mClient.Client.Available
                If i > 0 Then

                    Dim b(i) As Byte

                    mClient.GetStream().Read(b, 0, i)
                    RichTextBoxHistory.AppendText(System.Text.Encoding.ASCII.GetString(b))
                    RichTextBoxHistory.AppendText(Environment.NewLine)
                    RichTextBoxHistory.SelectionStart = RichTextBoxHistory.TextLength
                    RichTextBoxHistory.ScrollToCaret()
                    'Form1.RichTextBoxHistory.Invoke(mReceiveFunc, New Object() {Me, System.Text.Encoding.ASCII.GetString(b)})

                End If

            Else
                LabelStatus.Text = "Disconnected"
            End If
        Else
            LabelStatus.Text = "Disconnected"
        End If
    End Sub

    Private Sub TextBoxSend_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBoxSend.KeyPress
        If e.KeyChar = Convert.ToChar(13) Then
            ButtonSend_Click(Nothing, Nothing)
            e.Handled = True
        End If
    End Sub

End Class

Anmerkung: Der Code war nur zum schnellen Testen des Servers; er ist nicht besonders sauber, und Exception Handling ist stellenweise absichtlich deaktiviert. Außerdem kümmert er sich nicht um Eye-Candy wie das Sperren der Textbox, wenn keine Verbindung besteht, etc.
 
  • [VB.NET] Sockets Peer to Peer Beitrag #15
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Hi.

Entschuldigung ich hoffe das zählt noch nicht zur Leichenschändung, aber ich hatte wenig Zeit. Ich habe den Code gerade getestet. Lokal funktioniert alles super, aber über Internet funktioniert nichts. Ich weiß echt nicht wodran es noch liegen kann. Ich mache noch ein paar screenshots um's euch zu zeigen :)

Gruß
24
 
  • [VB.NET] Sockets Peer to Peer Beitrag #16
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Wie sieht's denn aus mit den Screenshots? ;)
 
  • [VB.NET] Sockets Peer to Peer Beitrag #17
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Einen Moment noch, mir ist aufgefallen das ich noch auf VB.08 bin ...
 
  • [VB.NET] Sockets Peer to Peer Beitrag #18
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
So , die Fehlermeldung ist bei der 2010 Version nicht mehr da, allerdings habe bekomme ich zur Zeit gar keine Verbindung. Weder über meine lokal IP, NO-IP noch über meine Internet (Router IP).

Wie muss die Einstellung bei den Timern sein?
Ich hab denen Interval = 1 gegeben und Enabeld = True


Gruß
24
 
  • [VB.NET] Sockets Peer to Peer Beitrag #19
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Das war eigentlich als Beispiel zum Lernen der Funktion gedacht, darum hab ich nicht gleich die fertigen Programme hochgeladen. Das Interval beim Timer wird in ms angegeben; da erscheint 1ms zum Aktualisieren der Client-Liste doch etwas kurz; 100 oder 1000 wird auch reichen.
Die Beispiele hab ich übrigens mit VS2008 erstellt. Dass Fehlermeldungen zwischen den Versionen einfach so verschwinden, erscheint mir ehrlichgesagt ein wenig eigenartig; k.A. was der Grund sein könnte.
Wenn du die Verbindung lokal (127.0.0.1) hinkriegst, dann liegts jedenfalls nicht am Programm, sondern an der Netzwerkkonfiguration; im wahrscheinlichsten Fall an einer Firewall.
 
  • [VB.NET] Sockets Peer to Peer Beitrag #20
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Hi! (sorry, das ich einen neuen thread erstellt habe, hatte vergessen das ich hier schonmal nachgefragt habe)

Wenn ich den Client ausführe und auf den Server connecten will, dann bekomme ich bin klicken auf den Connect button diese Fehlermeldung:

Code:
Informationen über das Aufrufen von JIT-Debuggen
anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

************** Ausnahmetext **************
System.Net.Sockets.SocketException (0x80004005): Ein Socketvorgang bezog sich auf ein nicht verfügbares Netzwerk 84.144.240.245:8686
   bei System.Net.Sockets.TcpClient.Connect(String hostname, Int32 port)
   bei TCP_IP_Powerforen_Client.Form1.ButtonConnect_Click(Object sender, EventArgs e) in C:\Users\DieVar\AppData\Local\Temporary Projects\TCP IP Powerforen Client\Form1.vb:Zeile 20.
   bei System.Windows.Forms.Control.OnClick(EventArgs e)
   bei System.Windows.Forms.Button.OnClick(EventArgs e)
   bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   bei System.Windows.Forms.Control.WndProc(Message& m)
   bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
   bei System.Windows.Forms.Button.WndProc(Message& m)
   bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Geladene Assemblys **************
mscorlib
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 (RTMRel.030319-0100).
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
----------------------------------------
TCP IP Powerforen Client
    Assembly-Version: 1.0.0.0.
    Win32-Version: 1.0.0.0.
    CodeBase: file:///C:/Users/DieVar/Desktop/VB2010/TCP%20IP%20Powerforen%20Client/TCP%20IP%20Powerforen%20Client/obj/x86/Debug/TCP%20IP%20Powerforen%20Client.exe.
----------------------------------------
Microsoft.VisualBasic
    Assembly-Version: 10.0.0.0.
    Win32-Version: 10.0.30319.1 built by: RTMRel.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
----------------------------------------
System
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 built by: RTMRel.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
----------------------------------------
System.Core
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 built by: RTMRel.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
----------------------------------------
System.Windows.Forms
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 built by: RTMRel.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
----------------------------------------
System.Drawing
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 built by: RTMRel.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
----------------------------------------
System.Configuration
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 (RTMRel.030319-0100).
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
----------------------------------------
System.Xml
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 built by: RTMRel.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
----------------------------------------
System.Runtime.Remoting
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 (RTMRel.030319-0100).
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
----------------------------------------
System.Windows.Forms.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 built by: RTMRel.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
----------------------------------------
mscorlib.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 (RTMRel.030319-0100).
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
----------------------------------------

************** JIT-Debuggen **************
Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
Konfigurationsdatei der Anwendung oder des Computers
(machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

Zum Beispiel:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
Ausnahmen an den JIT-Debugger gesendet, der auf dem
Computer registriert ist, und nicht in diesem Dialogfeld behandelt.

Sowohl über den localhost als auch über die IP meines Routers.

Weiß ein wodran das liegt?

S1024
 
Thema:

[VB.NET] Sockets Peer to Peer

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben