Du bist nicht angemeldet.

[VB 2008] Peer-to-Peer Chat

viperkill

Registrierter Benutzer

  • »viperkill« ist männlich
  • »viperkill« ist der Autor dieses Themas

Beiträge: 371

Dabei seit: 10. August 2009

Wohnort: Papierkorb

Hilfreich-Bewertungen: 8

  • Private Nachricht senden

1

Freitag, 27. August 2010, 17:08

Peer-to-Peer Chat

Hi,

da viele hier schon gefragt haben, wie man ein Fernwartungstool programmiert habe ich hier mal den ansatz ;)
Dieser Code ist nur dazu da die Daten zu verschicken und basiert auf Peer-To-Peer. Um eine Verbindung zu einem anderem PC herzustellen muss also kein server mehr erstellt werden (ggf. muss nur ein Port geöffnet werden).


Fangen wir mal an:

Wir brauchen einen Timer(Timer1) der die Interval 1 hat. Vielleicht noch eine Textbox(TextBox1) und ein Button(Button1) um nachrichten eingeben bzw. versenden zu können ;)


Imports:

Visual Basic Quellcode

1
2
3
4
Imports System.Net.Sockets
Imports System.Threading
Imports System.Net
Imports System.IO



Globale Variablen:

Visual Basic Quellcode

1
2
3
Dim Listener As New TcpListener(65535)
Dim Client As New TcpClient
Dim Recieve as String = ""


Der Listener hört wie bei einem normalen Server auch hier den Port ab der in der Klammer angegeben ist. Der Client verschickt die Sachen an die angegebene IP-Adresse(wird später angegeben). In dem String "Recieve" wird später der empfange text gespeichert.


Form_Load:

Visual Basic Quellcode

1
2
3
4
5
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim ListThread As New Thread(New ThreadStart(AddressOf Listening))
        ListThread.Start()
        Timer1.Start()
End Sub


Hier wird ein neuer Thread für den Listener erstellt, damit sich das programm nicht aufhängt wenn der listener läuft. Außerdem wird noch der Timer gestartet.

Listener:

Visual Basic Quellcode

1
2
3
Public Sub Listening()
        Listener.Start()
End Sub


Hier wird der Listener einfach nur gestartet.



Der Timer:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If Listener.Pending = True Then
            Recieve = ""
            Client = Listener.AcceptTcpClient()

            Dim Reader As New StreamReader(Client.GetStream())
            While Reader.Peek > -1
                Recieve = Recieve + Convert.ToChar(Reader.Read()).ToString
            End While

            MsgBox(Recieve)
        End If
    End Sub


Der Timer überprüft jede Millisekunde(sofern die Interval auf 1 steht) ob der Listener etwas empfängt. Wenn er etwas empfängt dann liest ein StreamReader das verschickte aus dem Client aus und zeigt den Text in einer Messagebox an.



Text versenden:


Visual Basic Quellcode

1
2
3
4
5
6
7
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Client = New TcpClient(*IP Adresse*, 65535)

        Dim Writer As New StreamWriter(Client.GetStream())
        Writer.Write(TextBox1.Text)
        Writer.Flush()
    End Sub



Hier wird dem Clienten dann die IP-Adresse und der Port zugewiesen und der Text aus TextBox1 verschickt.


Das wars auch schon :D



Viel Spaß mit dem Code...



Greetz,

viperkill

One

Registrierter Benutzer

  • »One« ist männlich

Beiträge: 26

Dabei seit: 17. Januar 2010

  • Private Nachricht senden

2

Dienstag, 31. August 2010, 15:11

Das ist doch das gleiche wie in diesem Thread:

Multiserver (TCP)

Nur diese Version ist ein bischen abgekürzt und kompakter!
Rechtschreibfehler enventuall vorhanden.
Bitte nicht böse sein.
;)

RecoverChief: 43%

Kangaroo

VB Panda

  • »Kangaroo« ist männlich

Beiträge: 2 759

Dabei seit: 13. Juni 2010

Hilfreich-Bewertungen: 255

  • Private Nachricht senden

3

Dienstag, 31. August 2010, 15:24

Wir brauchen einen Timer(Timer1) der die Interval 1 hat

Nur diese Version ist ein bischen abgekürzt und kompakter!

Und hat mit .NET (ereignisbasierend) überhaupt nichts zu tun. Sorry , aber einen Timer für einien TCPListener zu verwenden ist ziemlicher Müll und gehört bestimmt nicht hier als Vorbild für Andere in den SourceCode-Austausch.