Avatar billede morano Nybegynder
21. august 2006 - 20:45 Der er 12 kommentarer

meget simple chat

hej,
jeg er ret ny til C# og har ny ledt efter nogen tutorials til at lave en MEGET simple online chat. Bare for at få en idé om hvordan det kører når man skal lave sådan noget:) men har ikke rigtigt kunne finde nogen tutorials.. Så, er der nogen der kender nogen og kan linke til dem?

jeg ved ikke om det er nødvendigt, men jeg vil lige sige at, jeg bruger Microsoft Visual Studio.
Avatar billede arne_v Ekspert
22. august 2006 - 03:01 #1
jeg skitserede noget i et spørgsmål for nogle måneder siden

kun socket og multithreaded server ikke noget GUI
Avatar billede arne_v Ekspert
22. august 2006 - 03:02 #2
using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;

class ChatMain
{
    public static void Main(string[] args)
    {
        Server srv = new Server();
        srv.Run();
    }
}

class Server
{
    private ArrayList allclients;
    public void Run()
    {
        allclients = new ArrayList();
        TcpListener server = new TcpListener(IPAddress.Any, 50000);
        server.Start();
        while(true)
        {
            TcpClient client = server.AcceptTcpClient();
            ClientHandler ch = new ClientHandler(client, this);
            allclients.Add(ch);
            (new Thread(new ThreadStart(ch.Run))).Start();
        }
    }
    public void SendAll(string msg)
    {
        foreach(ClientHandler ch in allclients)
        {
            ch.Send(msg);
        }
    }
    public void SendOne(string msg, string address)
    {
        foreach(ClientHandler ch in allclients)
        {
            if(ch.Remote.IndexOf(address) == 0)
            {
                ch.Send(msg);
            }
        }
    }
    public void Remove(ClientHandler ch)
    {
        allclients.Remove(ch);
    }
}

class ClientHandler
{
    private string remote;
    private StreamReader rdr;
    private StreamWriter wrt;
    private Server srv;
    public ClientHandler(TcpClient cli, Server srv)
    {
        remote = cli.Client.RemoteEndPoint.ToString();
        rdr = new StreamReader(cli.GetStream());
        wrt = new StreamWriter(cli.GetStream());
        this.srv = srv;
    }
    public void Run()
    {
        while(true)
        {
            string line = rdr.ReadLine();
            string[] parts = line.Split(" ".ToCharArray());
            string cmd = parts[0];
            if(cmd == "SEND")
            {
                string address = parts[1];
                if(address == "*")
                {
                    srv.SendAll(line.Substring(cmd.Length + address.Length + 2));
                }
                else
                {
                    srv.SendOne(line.Substring(cmd.Length + address.Length + 2), address);
                }
            }
            else if(cmd == "EXIT")
            {
                srv.Remove(this);
                return;
            }
        }
    }
    public void Send(string msg)
    {
        lock(wrt)
        {
            wrt.WriteLine(msg);
            wrt.Flush();
        }
    }
    public string Remote
    {
        get
        {
            return remote;
        }
    }
}
Avatar billede arne_v Ekspert
22. august 2006 - 03:02 #3
using System;
using System.IO;
using System.Net.Sockets;
using System.Threading;

class ChatClient
{
    public static void Main(string[] args)
    {
        TcpClient client = new TcpClient("localhost", 50000);
        StreamWriter wrt = new StreamWriter(client.GetStream());
        (new Thread(new ThreadStart((new Reader(client)).Run))).Start();
        string line;
        while((line = Console.ReadLine()) != null)
        {
            wrt.WriteLine("SEND " + line);
            wrt.Flush();
        }
        wrt.WriteLine("EXIT");
        wrt.Flush();
        wrt.Close();
        client.Close();
    }
}

class Reader
{
    private StreamReader rdr;
    public Reader(TcpClient cli)
    {
        rdr = new StreamReader(cli.GetStream());
    }
    public void Run()
    {
        try
        {
            string line;
            while((line = rdr.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }
        }
        catch(Exception)
        {
            // nothing
        }
    }
}
Avatar billede team-temp Nybegynder
22. august 2006 - 14:31 #4
Det forstår jeg ikke en brik af arne :)

Kan man se denne chat uden GUI`?
Avatar billede Slettet bruger
22. august 2006 - 14:52 #5
Det er to forskellige programmer. Den ene er server, den anden er programmet, man bruger for at chatte.

Åbn 3 eller flere kommandoprompt-vinduer. Start server-programmet i det første vindue og klientprogrammet i de andre. Prøv at skrive noget i et af klientvinduerne. Se, hvad der sker. Prøv at skrive noget i et andet klientvindue. Se, hvad der sker.
Avatar billede Slettet bruger
22. august 2006 - 14:54 #6
Hvis du vil prøve mellem flere maskiner, skal du i klientprogrammet lave "localhost" om til adressen på den maskine, som serveren kører på.
Avatar billede morano Nybegynder
25. august 2006 - 21:34 #7
se jeg kunne godt tænke mig en "ordenligt" tutorial... Så jeg kunne lærer alt fra bunden. Hvordan det hele hænger sammen:)
Nogen der kan hjælpe med det problem?
Avatar billede morano Nybegynder
25. august 2006 - 22:39 #10
findes der intet der er specielt lavet til visual studio, som jeg bruger. Ville være nemmere at se hvad der faktisk sker og så bagefter begynde at forstå koden, istedet for at prøve at forstå hvad laves uden at kunne få det til at virke. For jeg kan altså ikke få noget som helst til at virke:D
Avatar billede arne_v Ekspert
26. august 2006 - 00:12 #11
måske skal du starte med noget simplere end multithreaded netværks programmering
Avatar billede morano Nybegynder
27. august 2006 - 02:01 #12
hvis der, sådan meget enkelt, var en der kunne forklarer hvordan jeg, med sockets, skriver noget tekst i et tekst felt og sender det til en server og så viser serveren hvad det var der blev skrevet, så ville det hjælpe mig utroligt meget... Så ville jeg helt sikkert kunne komme langt derfra:)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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