Avatar billede h-w.dk Nybegynder
07. januar 2004 - 23:03 Der er 16 kommentarer

Sende og modtager beskeder?

Jeg har lavet en chat der virker ligesom messenger osv. i vb6, men nu kunne jeg godt tænke mig at lave det i vb.net.

Hvordan sender jeg beskeder til en bestemt ip over nettet, og hvordan modtager jeg dem??

Er der nogen der kan hjælpe?
Avatar billede arne_v Ekspert
07. januar 2004 - 23:07 #1
Som I alle mulige andre spog: via sockets

Check docs for namespace System.Net.Sockets !
Avatar billede h-w.dk Nybegynder
08. januar 2004 - 00:04 #2
Jeg er desværre ikke så hård til det med sockets, så hvis du vil give et lille eksempel ville jeg være glad!
Avatar billede arne_v Ekspert
08. januar 2004 - 09:25 #3
Jeg kan godt lave et eksempel men der er allerede skrevet om det. F.eks.:

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=144&lngWId=10

Prøv og kig på det - hvis du stadig øsnker det skal jeg nok lave et lille
eksempel.
Avatar billede h-w.dk Nybegynder
08. januar 2004 - 09:48 #4
Jeg har kigget lidt på det, men er stadig ret usikker i det...

Jeg skal bare have sådan at jeg kan sende beskeder peer2peer over nettet...Har kigget på det system.net.sockets, men kan ikke lige få det til at fungere!

Hvis du vil lave et simpelt eksempel, som jeg evt. kan bygge videre på, ville det være lækkert...
Avatar billede arne_v Ekspert
08. januar 2004 - 21:26 #5
Server:

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

Class Server

    Public Shared Sub Main(ByVal args As String())
        Dim server As TcpListener = New TcpListener (IPAddress.Any, 1234)
        server.Start
        Dim client As TcpClient = server.AcceptTcpClient
        Dim rdr As StreamReader = New StreamReader (client.GetStream)
        Dim wrt As StreamWriter = New StreamWriter (client.GetStream)
        Dim line As String = rdr.ReadLine
        While Not (line Is Nothing)
            wrt.WriteLine("Jeg har modtager: " + line)
            wrt.Flush
            line = rdr.ReadLine
        End While
        rdr.Close
        wrt.Close
        client.Close
        server.Stop
    End Sub
End Class

client:

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

Class Client

    Public Shared Sub Main(ByVal args As String())
        Dim client As TcpClient = New TcpClient ("localhost", 1234)
        Dim wrt As StreamWriter = New StreamWriter (client.GetStream)
        Dim rdr As StreamReader = New StreamReader (client.GetStream)
        wrt.WriteLine("Jeg hedder Arne")
        wrt.Flush
        Console.WriteLine(rdr.ReadLine)
        wrt.WriteLine("Dette er en test")
        wrt.Flush
        Console.WriteLine(rdr.ReadLine)
        wrt.Close
        rdr.Close
        client.Close
    End Sub
End Class
Avatar billede h-w.dk Nybegynder
09. januar 2004 - 11:59 #6
Jeg er ikke helt med.

Jeg skal ikke have en server...det skal køre som p2p, altså så der er server og client i en og samme form...

Kan du hjælpe??
Avatar billede arne_v Ekspert
09. januar 2004 - 12:10 #7
I TCP/IP er der altid en client og en server. Der er en ende som laver
en connection til den anden ende.

Hvis du vil lave P2P kan du f.eks. lade begge ender være både
client og server.

UDP/IP er lidt anderledes.
Avatar billede h-w.dk Nybegynder
09. januar 2004 - 12:13 #8
ok, problemet er bare at serveren stopper når den har modtaget en besked, og når jeg ligger serveren ind i en form, og viser modtaget besked i en textbox, kan, "låser" den indtil den har modtaget en besked, det gør jo at jeg ikke kan ligge dem i den samme form....håber du er med ;-)
Avatar billede arne_v Ekspert
09. januar 2004 - 12:17 #9
Med to forbindelser - 1 send og 1 modtag hvos hver - så skal man
nok have en ekstra tråd i hver ende til at stå og læse.

Jeg kan godt prøve at bixe et eksempel med det.

I aften eller imorgen.
Avatar billede h-w.dk Nybegynder
09. januar 2004 - 12:22 #10
kan du ikke prøve at forklare det lidt nærmere, så vil jeg selv lige kigge på det, og vende tilbage....hvis jeg kan forstå hvaddu mener :-)
Avatar billede arne_v Ekspert
09. januar 2004 - 12:31 #11
Hvis du starter en tråd som kører i en løkke hvor den
læser indkomne beskeder og skriver dem til et text area,
mens hoved tråden processer bruger input og sender dem.

Så får man den rigtige "interaktive" feel.

Der er også andre måder at gøre det på, men 2 forbindelser
og 2 tråde er en af den nemmere at overskue.
Avatar billede arne_v Ekspert
10. januar 2004 - 13:08 #12
Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading

Class P1

    Public Shared Sub Main(ByVal args As String())
        Dim t As Thread = New Thread (AddressOf ReadAndDisplay)
        t.Start
        Thread.Sleep(10000)
        Dim client As TcpClient = New TcpClient ("localhost", 10002)
        Dim wrt As StreamWriter = New StreamWriter (client.GetStream)
        Dim line As String = Console.ReadLine
        While Not (line Is Nothing)
            wrt.WriteLine(line)
            wrt.Flush
            line = Console.ReadLine
        End While
        wrt.Close
        client.Close
    End Sub
    Public Shared Sub ReadAndDisplay
        Dim server As TcpListener = New TcpListener (IPAddress.Any, 10001)
        server.Start
        Dim client As TcpClient = server.AcceptTcpClient
        Dim rdr As StreamReader = New StreamReader (client.GetStream)
        Dim line As String = rdr.ReadLine
        While Not (line Is Nothing)
            Console.WriteLine(line)
            line = rdr.ReadLine
        End While
        rdr.Close
        client.Close
        server.Stop
    End Sub
End Class
Avatar billede arne_v Ekspert
10. januar 2004 - 13:09 #13
Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading

Class P2

    Public Shared Sub Main(ByVal args As String())
        Dim t As Thread = New Thread (AddressOf ReadAndDisplay)
        t.Start
        Thread.Sleep(10000)
        Dim client As TcpClient = New TcpClient ("localhost", 10001)
        Dim wrt As StreamWriter = New StreamWriter (client.GetStream)
        Dim line As String = Console.ReadLine
        While Not (line Is Nothing)
            wrt.WriteLine(line)
            wrt.Flush
            line = Console.ReadLine
        End While
        wrt.Close
        client.Close
    End Sub
    Public Shared Sub ReadAndDisplay
        Dim server As TcpListener = New TcpListener (IPAddress.Any, 10002)
        server.Start
        Dim client As TcpClient = server.AcceptTcpClient
        Dim rdr As StreamReader = New StreamReader (client.GetStream)
        Dim line As String = rdr.ReadLine
        While Not (line Is Nothing)
            Console.WriteLine(line)
            line = rdr.ReadLine
        End While
        rdr.Close
        client.Close
        server.Stop
    End Sub
End Class
Avatar billede arne_v Ekspert
10. januar 2004 - 13:11 #14
To lille apps som kan og snakke med hinanden.

localhost er hardcoded
port nummer er hadcoded
man har kun 10 sekunder til at starte den anden
de er console mode

Men de viser ihvertfald grundliggende sende/modtage tekst over TCP/IP
i begge retninger via 2 forbindelser og 2 tråde.
Avatar billede arne_v Ekspert
23. januar 2004 - 22:19 #15
OK ?
Avatar billede h-w.dk Nybegynder
25. januar 2004 - 18:16 #16
sry jeg ikke har skrevet før, men jeg har ikke haft tid til at kigge så meget på det.

Jeg kunne ikke umiddelbart få det til at fungere, men leger lige lidt mere med det..
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