![]()
|
|
Visual Basic Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
Imports System.Net.Sockets Imports System.IO Public Class Form1 'Variablen: Dim stream As NetworkStream Dim streamw As StreamWriter Dim streamr As StreamReader Dim Client As New TcpClient Dim IP As String = "192.168.111.17" Dim Port As Integer = 4000 Dim loginname As String = "abc" ' Diese Variable ist nicht Pflicht! Aber nützlich für ein Chatprogram... '_________________ Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Button1 wird geclickt Client.Connect(IP, Port) 'Client verbindet sich mit IP: 192.168.111.17 und Port 4000 If Client.Connected Then stream = Client.GetStream ' Stream wird auf Client verwiesen streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert streamr = New StreamReader(stream) ' Stream zum Empfangen wird deklariert login() ' Sub Login Else MsgBox("Verbidnung konnte nicht mit " & IP & " aufgebaut werden!") End If End Sub Sub client_send(ByVal text As String) streamw.WriteLine(text) streamw.Flush() End Sub Function client_recieve() As String client_recieve = streamr.ReadLine End Function ' Nach der erfolgreichen verbindung mit der IP und dem Port wird dieser Sub aufgerufen: Sub login() Try 'Hier kann man jetzt empfangen wie man will. 'Auch die reinfolge ist egal. 'Ich benutzte hier 1 mal senden, einmal empfangen und dann wieder von vorne... 'Man kann aber auch 2 mal Empfangen und 2 mal Senden nehmen oder...... wies einem so bekommt^^ client_send("onl " & loginname) If client_recieve() = "ok" Then 'Oder sonst irgend was. Ist nur ein Beispiel für einen Login Send_irgendwas() ' Hier kann gehts zum nächsten sub um irgend welche Daten zu versenden... Else 'Hier den Code wenn das Anmelden Fehlgeschlagen hat. Goto oder einen Sub aufrufen oder.... Exit Sub ' Versteht sich von Selbst... End If Catch ' Hier kann man eine Error Message ausgeben oder eine Automatische Fehlerbehebung machen,.... End Try End Sub Sub Send_irgendwas() client_send("Irgendwas") If client_recieve() = "Auch wieder irgendwas..." Then '..... Else '.... End If ' Und soo weiter... ' Und wenn man die verbidnugn schliesen will, dann einfach: Client.Close() ' Nichts einfacher als das!^^ End Sub End Class |
|
|
Visual Basic Quellcode |
1 2 |
Imports System.Net.Sockets Imports System.IO |
|
|
Visual Basic Quellcode |
1 2 3 4 5 |
Dim Client As New TcpClient 'Client Dim stream As NetworkStream Dim streamw As StreamWriter 'Zum senden Dim streamr As StreamReader 'Zum empfangen |
|
|
Visual Basic Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
sub Connect_to_Server(byval ip as string, byval port as integer) Client.Connect(IP, Port) 'Client verbindet sich mit IP: 192.168.111.17 und Port 4000 If Client.Connected Then Deklare_Streams() ' Sub Deklare_Streams() Else MsgBox("Verbidnung konnte nicht mit " & IP & " aufgebaut werden!") End If end sub |
|
|
Visual Basic Quellcode |
1 2 3 4 5 6 7 |
sub Deklare_Streams() stream = Client.GetStream ' Stream wird auf Client verwiesen streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert streamr = New StreamReader(stream) ' Stream zum Empfangen wird deklariert end sub |
|
|
Visual Basic Quellcode |
1 2 3 4 5 6 7 8 9 10 |
Sub client_send(ByVal text As String) ' Sub zum senden der Daten 'text' streamw.WriteLine(text) streamw.Flush() ' Achtung! Flush darf nie vergessen werden, da sonst die Daten nicht gesendet werden. End Sub Function client_recieve() As String ' Sub zum empfangen der Daten. client_recieve = streamr.ReadLine End Function |
|
|
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_send("HALLO") ' Dieser Stream geht zum Server. msgbox (client_recieve()) 'Und hier wird der empfangene Stream, der vom Server als Antwort gesendet wurde, in einer MSGBOX ausgegeben. end sub |
|
|
Visual Basic Quellcode |
1 |
Client.close
|
|
|
Visual Basic Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
Imports System.Net.Sockets Imports System.IO Imports System.Net Public Class Form1 'Variablen: Dim stream As NetworkStream Dim streamw As StreamWriter Dim streamr As StreamReader Dim Server As TcpListener Dim client As New TcpClient Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 4000) Dim mainthread As Threading.Thread '______________ Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load mainthread = New Threading.Thread(AddressOf mainserver) mainthread.Start() End Sub Sub mainserver() Try Server = New TcpListener(ipendpoint) Server.Start() client = Server.AcceptTcpClient stream = client.GetStream streamr = New StreamReader(stream) streamw = New StreamWriter(stream) ' Müsste eigentlich alles Klar sein. While True Select Case streamr.ReadLine Case "onl" ' und so weiter eigentlich müsste es heißen select case mid(streamr.readline,1,3) Aber da des ja vielen zu Kompiziert ist lass ich das mal weg^^ streamw.WriteLine("ok") ' Achtung! ist nicht Vollständig! streamw.Flush() ' Code muss angepasst werden..... Case "...." ' ...... Case "logoff" '........ End Select End While Catch ' Hier wieder eine Fehler behandlung und ein neuen Versuch den Server zu starten... End Try End Sub Private Sub Form1__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing server.close Try mainthread.Abort() Catch End Try End Sub End Class |
|
|
Visual Basic Quellcode |
1 2 3 |
Imports System.Net.Sockets Imports System.IO Imports System.Net |
|
|
Visual Basic Quellcode |
1 2 3 4 5 6 7 8 9 10 |
'Variablen: Dim stream As NetworkStream Dim streamw As StreamWriter Dim streamr As StreamReader Dim Server As TcpListener Dim client As New TcpClient Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 4000) Dim mainthread As Threading.Thread '______________ |
. Für Diejenigen denen das jetzt zu schnell mit den Variablen ging:|
|
Visual Basic Quellcode |
1 2 3 |
Dim stream As NetworkStream Dim streamw As StreamWriter Dim streamr As StreamReader |
|
|
Visual Basic Quellcode |
1 |
Dim Server As TcpListener |
|
|
Visual Basic Quellcode |
1 |
Dim client As New TcpClient |
|
|
Visual Basic Quellcode |
1 |
Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 4000) |
|
|
Visual Basic Quellcode |
1 |
Dim mainthread As Threading.Thread |
.|
|
Visual Basic Quellcode |
1 2 3 4 5 6 |
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load mainthread = New Threading.Thread(AddressOf mainserver) mainthread.Start() End Sub |
|
|
Visual Basic Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Sub mainserver() Try Server = New TcpListener(ipendpoint) Server.Start() client = Server.AcceptTcpClient stream = client.GetStream streamr = New StreamReader(stream) streamw = New StreamWriter(stream) ' Müsste eigentlich alles Klar sein. While True Select Case streamr.ReadLine Case "irgendwas" streamw.WriteLine("zu irgendwas eine anwort") streamw.Flush() Case "...." ' ...... Case "logoff" '........ End Select End While Catch ' Hier wieder eine Fehler behandlung und ein neuen Versuch den Server zu starten... End Try End Sub |

Dieser Beitrag wurde bereits 13 mal editiert, zuletzt von »Malischh« (26. März 2009, 12:54)
Benutzer, die diesen Beitrag hilfreich fanden:
|
|
Visual Basic Quellcode |
1 |
Server = New TcpListener(ipendpoint) |
|
|
Visual Basic Quellcode |
1 |
Server.Start() |
|
|
Visual Basic Quellcode |
1 |
client = Server.AcceptTcpClient
|
|
|
Visual Basic Quellcode |
1 2 3 |
stream = client.GetStream streamr = New StreamReader(stream) streamw = New StreamWriter(stream) ' Müsste eigentlich alles Klar sein. |
|
|
Visual Basic Quellcode |
1 |
While True |
|
|
Visual Basic Quellcode |
1 |
Select Case streamr.ReadLine |
|
|
Visual Basic Quellcode |
1 2 3 4 5 6 7 8 9 10 |
Case "irgendwas" streamw.WriteLine("zu irgendwas eine anwort") streamw.Flush() ...... end select end while |
|
|
Visual Basic Quellcode |
1 2 3 4 5 6 7 |
Private Sub Form1__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing Server .Stop Try mainthread.Abort() Catch End Try End Sub |
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »Malischh« (27. März 2009, 15:40)

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Malischh« (2. August 2009, 00:16)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Malischh« (2. August 2009, 00:17)
per Router ja. Hat das irgendwas zu bedeuten?
Dann Starte den Router mal neu.![]()
) Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »basti2485« (19. November 2009, 17:08)
While True
Wozu die Schleife? Ganz einfach: Wenn der Server(Zur Rchtigkeit eigentlich jetzt Client) einen Stream empfangen und einen gesendet hat, sollte er doch wieder auf einen Stream warten. Wenn nicht, wird der Code nur einmal augeführt. Das kann wiederum nützlich sein, aber es kommt wie schon gesagt auf das jeweilige Projekt an.
Visual Basic Quellcode
1
Select Case streamr.ReadLine
Ein Stream wird empfangen und wird mit einer Select case aufgewertet.
Visual Basic Quellcode
1
2
3
4
5
6
7
8
9
10
Case "irgendwas"
streamw.WriteLine("zu irgendwas eine anwort")
streamw.Flush()
......
end select
end while
Wenn der empfangene Stream "irgendwas" ist, wird "zu irgendwas eine anwort" zurüch gesendet. oder man kann auch erst einen Code ausfürhenlassen und dann das Egrebnis zurück senden,....
Wichtig: Vergesst das .Flush nicht!!!
Man sollte das hier auch nicht Vergessen:
Visual Basic Quellcode
1
2
3
4
5
6
7
Hallo und guten Tag !Private Sub Form1__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
Server .Stop
Try
mainthread.Abort()
Catch
End Try
End Sub
Benutzerinformationen überspringen
Dabei seit: 26. Dezember 2009
Frühere Benutzernamen: Gutelaunetyp
Zitat
Also, es geht um folgendes:
Ich möchte ein Progrämmchen schreiben, das Daten, die an einem TCP-Port ankommen mitschreibt.
Im Detail:
Port soll eingegeben werden können
Dann soll das Programm warten, bis Daten ankommen. Diese Daten (reiner Text) kommen z.B. per GPRS (Router mit Portforwarding etc. ist ja kein Thema), somit wird
der PC also als Server arbeiten
Die Daten sollen dann z.B. in einem Textfeld angezeigt werden und bei Bedarf auch in eine Textdatei geschrieben werden können. Neue Daten
werden angehängt (append)
Zunächst nur für eine Client-Server Verbindung, vielleicht später für mehr (10 oder so)
Kann/muss man nun den Port nach einige Sekunden nach dem die Daten angekommen sind wieder schliessen oder kann man ihn einfach offen lassen,
auch für die Version mit mehrere Verbindungen ?
Manche sprehcne von "Port öffnen" andere von "Socket öffnen" etc. Habe noch nicht so ganz verstanden, was der Unterschied sein soll.
So, das ist es eigentlich.
Jetzt aber bitte keine Hinweise wie ich sie hier zu anderen Themen im Forum schon gesehen habe wie" Ist doch ganz einfach. Mach ein Form auf, öffne einen Port, mache einen tcplistener und fertig" Das hilft nicht wirklich weiter ;-)
Ich danke schon für die vielen Hilfe und hoffe ich habe gut erklärt, was ich fragen und wissen will. So gut ist mein Deutsch leider noch nicht.
Zitat von »Malischh«
Wichtig: Vergesst das .Flush nicht!!!
Zitat
Die Flush-Methode implementiert die Stream.Flush-Methode, wirkt sich jedoch nicht auf Netzwerkstreams aus, da der NetworkStream nicht gepuffert ist.Durch Aufrufen der Flush-Methode wird keine Ausnahme ausgelöst.