Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Client-Server problem...

[es] :: Java :: Client-Server problem...

[ Pregleda: 1904 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

RMAN
Milan Đukić
student
Knićanin

Član broj: 32492
Poruke: 1166
213.244.208.*



+5 Profil

icon Client-Server problem...14.05.2010. u 00:00 - pre 169 meseci
Imam jedan program koji super radi samo meni nije bas najjasnije kako.

Problem je sledeci:

Server prima podatke od klijenta i pokrece novu nit za opsluzivanje tog klijenta. I sada ta nit prima podatke od tog odredjenog klijenta i obradjuje ih.

Meni sad nije jasno kako Server zna kad da pokrene novu nit? Odnosno, pokrene je kada ja run-ujem klijenta. Ako ja dobro kontam kada preko accept primi podatak tada kreira novu nit.
E sad, klijent posalje podatak serveru i zasto se sad ne kreira nit vec se podatak salje u vec kreiranu nit, odnosno server uopste ne reaguje na poslat podatak. A nit i server osluskuju isti port. I kada kreiram jos 5 klijenata kreirace se jos 5 niti?

Moje pitanje je kako server zna kad treba da kreira nit a kad ne?
Eureka!

MILAN DJUKIC
D J U K A
 
Odgovor na temu

RMAN
Milan Đukić
student
Knićanin

Član broj: 32492
Poruke: 1166
213.244.209.*



+5 Profil

icon Re: Client-Server problem...14.05.2010. u 00:18 - pre 169 meseci
Sad sam nesto citao o accept metodi.
Ako sam dobro razumeo accept prima podatak samo kada se kreira novi objekat klase Socket odnosno kada se uspostavi konekcija?

Znaci posle ove linije koda se aktivira accept na serveru?
Code (java):
Socket sock = new Socket(address, TCP_PORT);


Da li sam u pravu?
Eureka!

MILAN DJUKIC
D J U K A
 
Odgovor na temu

bantu

Član broj: 38670
Poruke: 305
89.111.240.*



+27 Profil

icon Re: Client-Server problem...14.05.2010. u 07:24 - pre 169 meseci
Za razliku od nekih drugih protokola TCP/IP je sinhroni nacin komunikacije i svaki paket je vezan za jednu sesiji ili konekciju kako hoces. Procitaj malo o tome. Metoda accept ceka prvi paket konekcije mislim da on nosi flag syn i odgovara sa syn-ack, nakon cega klijent odgovara sa ack i onda je konekcija uspostavljena, to je neki 3-way handshakeing. (nisam više siguran, ne zamjerite ako griješim) Prvi paket sadrzi inicijali sequence no.
Nakon "rukovanja" on kreira socket i nastavlja se izvrsavanje programa a ti onda kreiras novu nit koja obradjuje ono sto dolazi na taj socket.
Mozda sam malo konfuzno i ne do u detalje tacno objasnio, ali mislim da ce ti pomoci da shvatis kako radi TCP protokol a onda i implementacija istog u javi.
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.COOL.ADSL.VLine.Verat.NET.



+1 Profil

icon Re: Client-Server problem...14.05.2010. u 13:50 - pre 169 meseci
Evo jednog prostog eho servera koji cim prihvati klijenta (sa accept()) kreira novu nit u kojoj se odvija komunikacija sa tim klijentom. Dakle, slanje i primanje podataka su nezavisni od prihvatanja klijenta, a to moze da se radi u posebnoj niti za svakog klijenta.
Code:

/*

ServerThreaded.java
-------------------

Multithreaded server listens custom port and echoes requests.

Compile with
    javac ServerThreaded.java

*/


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executors;


// main class accepts clients and gives them to a thread
class ServerThreaded
{
    public static void main(String args[])
    {
        java.util.concurrent.Executor threadPool = Executors.newFixedThreadPool(3);
        
        try
        {
            ServerSocket server = new ServerSocket(9000);
            if (server.isBound())
            {
                System.out.println("main():listening...");
                while (true)
                {
                    Socket client = server.accept();
                    threadPool.execute(new Run(client));
                }
            }
        }
        catch (IOException e)
        {
            System.out.println("ServerThreaded.main():e=" + e);
        }
    }
}


// talks with a single client
class Run implements Runnable
{
    public Run(Socket client)
    {
        this.client = client;
    }
    
    public void run()
    {
        try
        {
            System.out.println("this.client.getRemoteSocketAddress()=" + this.client.getRemoteSocketAddress());

            // read client request
            byte request[] = new byte[100];
            this.client.getInputStream().read(request, 0, 100);
            System.out.println("Run.run():request=" + new String(request));

            // send response same as request
            System.out.println("Run.run():this.client.isClosed()=" + this.client.isClosed() + ",this.client.isConnected()=" + this.client.isConnected());
            this.client.getOutputStream().write(request);

            this.client.close();
        }
        catch (IOException e)
        {
            System.out.println("Run.run():e=" + e);
        }
    }
    
    private Socket client;
}

Valjda ce ti razresiti neke nedoumice...
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

[es] :: Java :: Client-Server problem...

[ Pregleda: 1904 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.