Avatar billede testpilot_dk Nybegynder
07. marts 2005 - 06:29 Der er 17 kommentarer og
1 løsning

Client - Server program

Hej!

Nu har jeg siddet og rodet lidt med de forskellige typer sockets og forbindelses muligheder. Så er mit problem bare at jeg ikke kunne få mine klienter til at forbinde uden for mit netværk.

Jeg sidder bag en router som slusser nogle porte videre til min server.

Er der nogen som har en løsning til hvordan jeg kan få mine klienter til at kommunikere med serveren, ligegyldigt hvor på internettet de er.
Avatar billede arne_v Ekspert
07. marts 2005 - 07:26 #1
Hvis din router forwarder den port der bruges til din server, så bør
det virke.

Mange vælger dog at bruge web service og port 80 fremfor socket eller
remoting til den slags løsninger.
Avatar billede testpilot_dk Nybegynder
07. marts 2005 - 08:01 #2
Mit problem er at jeg har et specielt server program liggende på maskinen, for at jeg kan kommunikere med dette, er jeg vel nød til at have sockets, begge programmer er skrevet i C#
Avatar billede prec Nybegynder
07. marts 2005 - 11:50 #3
Du kan evt lave en webservice som en slags gateway, dvs. man udefra sender en besked til din webservice og den sender det så videre til din server.
Avatar billede testpilot_dk Nybegynder
07. marts 2005 - 15:24 #4
Jeg vil mene det er spild af tid, at jeg skal lave endnu et program som håndtere det! jeg forsøger at finde en anden løsning! Evt. med 2 programmer(client - server)
Avatar billede arne_v Ekspert
08. marts 2005 - 23:08 #5
Det bør der heller ikek vær enogen ben i.

Server listener på port X.

Der er lukket op for port X i router/firewall.

Client connecter til port X.

Bør virke.
Avatar billede testpilot_dk Nybegynder
09. marts 2005 - 07:56 #6
Hej Arne_v!

Kan du ikke komme med et eksempel, på den der listener funktion! klienten har jeg lavet. :)
Avatar billede arne_v Ekspert
09. marts 2005 - 08:07 #7
http://www.eksperten.dk/artikler/515

har masser af eksempler på socket client og servere (i både C#, VB.NET og Java)
Avatar billede arne_v Ekspert
09. marts 2005 - 08:09 #8
Et andet eksempel:

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 Remove(ClientHandler ch)
    {
        allclients.Remove(ch);
    }
}

class ClientHandler
{
    private StreamReader rdr;
    private StreamWriter wrt;
    private Server srv;
    public ClientHandler(TcpClient cli, Server srv)
    {
        rdr = new StreamReader(cli.GetStream());
        wrt = new StreamWriter(cli.GetStream());
        this.srv = srv;
    }
    public void Run()
    {
        while(true)
        {
            string line = rdr.ReadLine();
            string cmd = line.Split(" ".ToCharArray())[0];
            if(cmd == "SEND")
            {
                srv.SendAll(line.Substring(5));
            }
            else if(cmd == "EXIT")
            {
                srv.Remove(this);
                return;
            }
        }
    }
    public void Send(string msg)
    {
        lock(wrt)
        {
            wrt.WriteLine(msg);
            wrt.Flush();
        }
    }
}
Avatar billede testpilot_dk Nybegynder
09. marts 2005 - 08:59 #9
Hvordan sikre jeg så at den ikke få en port xxxxx efter jeg har lavet forbindelsen, kan jeg styrer området denne port som aftales
Avatar billede testpilot_dk Nybegynder
09. marts 2005 - 09:08 #10
Sockets er et godt valg hvis:
* performance er vigtig
* det er simple data strukturer
* det er store data mængder
* det er kun LAN traffik
* man kender systemerne i begge ender

Det er nemlig, det problem jeg har! det skal kører over internettet
Avatar billede arne_v Ekspert
09. marts 2005 - 09:19 #11
Så har du nogle problemer du skal have løst:
1)  der skal lukkes op for den eller de porte du bruger
2)  du skal overveje sikkerheds aspektet f.eks. via noget kryptering af trafikken
Avatar billede arne_v Ekspert
09. marts 2005 - 09:20 #12
08:59:01 forstår jeg ikke.

Serveren lytter på en port og alle clients connecter til den port.

Medminder di skal bruge flere forskellige connections (som FTP gør) så skal
du kun bruge en port at lytte på.
Avatar billede testpilot_dk Nybegynder
09. marts 2005 - 09:20 #13
jeg har overvejet kryptering af data! Da jeg tidligere har implementeret DES

Har åbnet for connection porte, hvordan sikre jeg så at min transmit port er den som jeg har angivet.
Avatar billede arne_v Ekspert
09. marts 2005 - 09:23 #14
Du angiver den port du connecter til i dit client program. Og den bruger den.
Avatar billede testpilot_dk Nybegynder
09. marts 2005 - 09:28 #15
Vil det så ikke sige, at hvis jeg har klienter på samtidig, så vil programmet ikke kunne registrere de rigtige data.

Hvor angiver jeg denne viden ? med port nummer
Avatar billede arne_v Ekspert
09. marts 2005 - 10:12 #16
Nej.

Din server lytter på en port. Alle client connecter til den port.

Ved connection accept i serveren får hver client sin egen handler.

Socket arkitekturen holder styr på at der er forskellige connectiosn til
forskellige clients.
Avatar billede testpilot_dk Nybegynder
09. marts 2005 - 10:34 #17
nå okay, så kan man jo ikke brokke sig!

Så må du jo hellere sende et svar arne_V

Så du kan få dine velfortjente points
Avatar billede arne_v Ekspert
09. marts 2005 - 10:41 #18
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
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