Avatar billede cronck Nybegynder
26. januar 2005 - 20:52 Der er 22 kommentarer og
1 løsning

UDP eller TCP?

Jeg er nu gået igang med mit første VB.Net program.
Som da jeg lavede mit første VB 6.0 program, vil jeg nu igen lave en chat server, og en klient.

Men hvad skal jeg bruge? TCP eller UDP forbindelse?
Og hvordan gør jeg så at serveren kan modtage flere klienter?
Hvordan laver jeg i det hele taget de "WinSockets" ?
Avatar billede arne_v Ekspert
26. januar 2005 - 21:01 #1
Hvis du regner med færre end 1000 klienter så gå efter TCP Sockets og
lav en tråd til hver klient.
Avatar billede arne_v Ekspert
26. januar 2005 - 21:03 #2
Dim server As TcpListener = New TcpListener (IPAddress.Any, 12345)
        server.Start

for at lytte på en port
Avatar billede cronck Nybegynder
26. januar 2005 - 21:03 #3
Jeg regner med højest 5 klienter, da det bare er for sjov at jeg laver dette... :-)

Jeg har tilfældigvis et par spm. hvor at du har hjulpet andre, men jeg vil helst gerne lave det hele i et GUI... :-)

Men først og fremmest skal jeg jo lave koden bag.
Avatar billede arne_v Ekspert
26. januar 2005 - 21:04 #4
en uendelig løkke som:

Dim client As TcpClient = server.AcceptTcpClient
        Dim clienthandler As T = New T(client)
        Call (New Thread (New ThreadStart (AddressOf clienthandler.Run))).Start
Avatar billede arne_v Ekspert
26. januar 2005 - 21:07 #5
Jeg ved ikke helt om jeg kan se pointen i server som GUI app, men ...

Det eneste du skal er at sådan set at have løkken som accepter connetcions i en
separat tråd.
Avatar billede cronck Nybegynder
26. januar 2005 - 21:11 #6
Type 'TcpListener' is not defined.
Type 'Thread' is not defined.

Jeg er bare vant til at lave tingene i GUI, så det vil jeg helst fortsætte med... :-)
Avatar billede arne_v Ekspert
26. januar 2005 - 21:15 #7
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading

så skulle du være dækket ind
Avatar billede cronck Nybegynder
26. januar 2005 - 21:45 #8
Type 'T' is not defined....?
Avatar billede arne_v Ekspert
26. januar 2005 - 21:53 #9
T er en klasse som du skal skrive. Den klasse som skal læse det client sender ind
og gøre noget ved det.
Avatar billede arne_v Ekspert
26. januar 2005 - 21:55 #10
skelet:

Public Class T
    Private client As TcpClient
    Public Sub New(cli As TcpClient)
        client = cli
    End Sub
    Public Sub Run()
        Dim rdr As StreamReader = New StreamReader (client.GetStream)
        Dim wrt As StreamWriter = New StreamWriter (client.GetStream)
        Dim outmsg As String
        Dim inmsg As String
        inmsg = rdr.ReadLine
        While Not (inmsg Is Nothing)
            ' gør noget her
            inmsg = rdr.ReadLine
        End While
        rdr.Close
        wrt.Close
    End Sub
Avatar billede arne_v Ekspert
26. januar 2005 - 21:55 #11
du skal nok gemme alle client'erne i en ArrayList, da jeg formoder at du har behov
for at sende til dem alle sammen
Avatar billede skwat Praktikant
26. januar 2005 - 21:56 #12
det er jo forkert katagori, han snakker vb6.0 og arne_v svare i .NET
Avatar billede cronck Nybegynder
26. januar 2005 - 21:57 #13
skwat, nej den er god nok... Jeg skal lave noget i vb.net, som at jeg før har lavet i vb 6.0
Avatar billede skwat Praktikant
26. januar 2005 - 21:57 #14
undskyld det er mig, jeg er helt sat af
Avatar billede cronck Nybegynder
26. januar 2005 - 21:58 #15
arne, vil du ikk sætte nogle forklaringer ind i den sidste?
Avatar billede arne_v Ekspert
26. januar 2005 - 22:05 #16
Public Class T
    ' hvert objekt af T klassen har en TcpClient med forbindelsen til dens klient
    Private client As TcpClient
    ' i constructor gemmer vi den reference til TcpClient vi får fra listener & accept tråden
    Public Sub New(cli As TcpClient)
        client = cli
    End Sub
    Public Sub Run()
        ' vi laver en reader og writer så vi kan læse & skrive fra 6 til klienten
        Dim rdr As StreamReader = New StreamReader (client.GetStream)
        Dim wrt As StreamWriter = New StreamWriter (client.GetStream)
        Dim outmsg As String
        Dim inmsg As String
        ' vi læser de tekster klienten sender
        inmsg = rdr.ReadLine
        While Not (inmsg Is Nothing)
            ' gør noget her med den tekst vi har modtaget
            inmsg = rdr.ReadLine
        End While
        ' vi lukker pænt når der ikke er mere (så returnerer ReadLine Nothing)
        rdr.Close
        wrt.Close
    End Sub
Avatar billede cronck Nybegynder
26. januar 2005 - 22:09 #17
Hmm...
Virker underligt... Jeg er jo vant til at man har for eks. Winsock(DataArrival), (ConnectionRequest) osv. osv....

Kan det lade sig gøre at stille alt dette op på den måde?
Avatar billede arne_v Ekspert
26. januar 2005 - 22:13 #18
Nu er jeg lidt handikappet af at jeg ikke kender "the VB6 way"
Avatar billede cronck Nybegynder
26. januar 2005 - 22:25 #19
Øv sq osse... :-)

Jeg prøver lige at studere lidt mere, og så vender jeg tilbage imorgen...
Avatar billede cronck Nybegynder
27. januar 2005 - 19:05 #20
Nu hvor at jeg tænker mig lidt om... Kan jeg ikke bare kalde T klassen for Winsock? er jo det som at jeg er vant til.. :-)
Avatar billede cronck Nybegynder
31. januar 2005 - 13:42 #21
Smidder du ikk et svar? så får du point...
Avatar billede arne_v Ekspert
31. januar 2005 - 14:12 #22
svar
Avatar billede cronck Nybegynder
31. januar 2005 - 14:21 #23
Tak! :-)
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