Avatar billede thomas_n Nybegynder
27. januar 2009 - 12:54 Der er 4 kommentarer og
1 løsning

TCP Client der lytter

Hej,

Jeg har i dag en TCP Server og en klient skrevet i VB6.
Klienten forbinder til serveren og når serveren har data til klienten, bliver de sendt til klienten.

Nu vil jeg gerne skrive klienten om til VB.Net.
Jeg kan godt forbinde til serveren, men mit problem er at få klienten til at lytte og modtage data, når de kommer.

Nogen der har et eksempel på dette?

V.h.
Thomas
Avatar billede arne_v Ekspert
27. januar 2009 - 20:43 #1
Du laver en TcpClient instans som connecter til server. Du kan fiske en Stream ud af den
og wrappe i baade en StreamWriter og en StreamReader.

Derefter afhaenger det lidt af din protokol.

Nogle gange har jeg haft success med at:
  - skrive til StreamWriter fra main thread
  - starte en separat thread til at laese fra StreamReader
Avatar billede thomas_n Nybegynder
28. januar 2009 - 09:30 #2
Det skal lige nævnes at det er mit første rigtige VB.Net projekt, så jeg kunne godt bruge lidt flere detaljer :)

Jeg har brugt eksemplerne i din artikel http://www.eksperten.dk/artikler/515 og det har hjulpet mig til at forbinde til serveren, men jeg mangler et eksempel på hvordan jeg modtager data på samme forbindelse.
Avatar billede arne_v Ekspert
28. januar 2009 - 15:20 #3
Følgende kode viser tråd teknikken:

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

Class ChatClient
    Public Shared Sub Main(ByVal args As String())
        Dim client As TcpClient = New TcpClient("localhost", 50000)
        Dim wrt As StreamWriter = New StreamWriter(client.GetStream)
        Call (New Thread(AddressOf (New Reader(client)).Run)).Start
        Dim line As String
        line = Console.ReadLine
        While Not (line Is Nothing)
            wrt.WriteLine("SEND " + line)
            wrt.Flush
            line = Console.ReadLine
        End While
        wrt.WriteLine("EXIT")
        wrt.Flush
        wrt.Close
        client.Close
    End Sub
End Class

Class Reader
    Private rdr As StreamReader

    Public Sub New(ByVal cli As TcpClient)
        rdr = New StreamReader(cli.GetStream)
    End Sub

    Public Sub Run()
        Try
            Dim line As String
            line = rdr.ReadLine
            While Not (line Is Nothing)
                Console.WriteLine(line)
                line = rdr.ReadLine
            End While
        Catch e As Exception
            ' nothing
        End Try
    End Sub
End Class
Avatar billede thomas_n Nybegynder
28. januar 2009 - 22:06 #4
Det var lige det jeg manglede, tak for hjælpen :)

Så skal du bare have dine point.
Avatar billede arne_v Ekspert
28. januar 2009 - 22:12 #5
så må jeg hellere smide et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester