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

Tcp Echo Client Helpppp

[es] :: Java :: Tcp Echo Client Helpppp

[ Pregleda: 2008 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

miros21k

Član broj: 22204
Poruke: 21
*.mdx.ac.uk.



Profil

icon Tcp Echo Client Helpppp14.03.2005. u 13:55 - pre 232 meseci
Cao narode, imam mali problemcic sa Java programiranjem (veliki zaprave mrzim programiranje, ali sad necemo o tome).

Na faksu moramo da napisemo TCP Echo Client koji ce da posalje neku poruku perma TCP Echo Serveru i tad ce taj Server da "odjekne" (ili ti echo na engleskom) poruku nazad.

Znaci server drzi nastavnik a ja kao student moram da napisem Client program kojeg kad pokrenem koristeci "command line" u formatu:
javac Client.java (da se compile)
java Client IPadresa PORTbroj "poruka" (da posalje poruku)
znaci
args[0]=server
args[1]=broj porta
args[2]=poruka
Ne mora da bude bas u tom redosledu al je "pozeljno".

E sad ja posto jako malo znam Java Programming ja sam lepo otisao na GOOGLE i ukucao TCPEchoClient.java i nasao neke programcice i izabrao jedan koji najvise razumijem ali i dalje ne razumem sve.

Pa bi zamolio citaoce da mi objasne sta TACNO svaka linija programa radi.

Code:

import java.net.*;  // for Socket
import java.io.*;   // for IOException and Input/OutputStream

public class Client {

  public static void main(String[] args) throws IOException
  {

    if ((args.length < 2) || (args.length > 3))  // Test for correct # of args
      throw new IllegalArgumentException("Parameter(s): <Server> <Word> [<Port>]");

    String server = args[0];       // Server name or IP address
    // Convert input String to bytes using the default character encoding
    byte[] byteBuffer = args[1].getBytes();

    int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;

    // Create socket that is connected to server on specified port
    Socket socket = new Socket(server, servPort);
    System.out.println("Connected to server...sending echo string");

    InputStream in = socket.getInputStream();
    OutputStream out = socket.getOutputStream();

    out.write(byteBuffer);  // Send the encoded string to the server

    // Receive the same string back from the server
    int totalBytesRcvd = 0;  // Total bytes received so far
    int bytesRcvd;           // Bytes received in last read
    while (totalBytesRcvd < byteBuffer.length)
{
      if ((bytesRcvd = in.read(byteBuffer, totalBytesRcvd,
        byteBuffer.length - totalBytesRcvd)) == -1)
        throw new SocketException("Connection close prematurely");
      totalBytesRcvd += bytesRcvd;
}

    System.out.println("Received: " + new String(byteBuffer));

    socket.close();  // Close the socket and its streams
  }
}


Razumijem da treba da se spojim na server putem socketa zvan "sock", razumijem da mora neki buffer da ima koji ce da spremi ukucana slova sa tastature, i razumijem da onda to mora da posalje i razumijem da mora da tu poruku primi od servera i pokaze na ekran (isto putem nekog buffera).

Kao sto vidite vec ima //comments ali ako bi neko mogao jos detaljnije da mi objasni sve to, POGOTOVO
int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;
i
if ((bytesRcvd = in.read(byteBuffer, totalBytesRcvd,
byteBuffer.length - totalBytesRcvd)) == -1)
throw new SocketException("Connection close prematurely");
totalBytesRcvd += bytesRcvd;

Pliz narode pomagaj. HVALA UNAPRED !!!
 
Odgovor na temu

logotet
Beograd

Član broj: 49849
Poruke: 42
*.nat-pool.bgd.sbb.co.yu.

Sajt: www.logotet.com


Profil

icon Re: Tcp Echo Client Helpppp14.03.2005. u 17:22 - pre 232 meseci
Ne treba da si tako lenj da malo pročitaš osnovne lekcije, ali ajd` da ti pomognem.
Citat:
int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;

to je takozvani ternarni operater i znači

int broj = (nekiUslov) ? 1 : 2;

ako je (nekiUslov ==true) onda broj dobije vrednost 1, a ko je false, onda broj dobije vrednost 2.

U drugom delu ne znam šta te zbunjuje. Pitalica if(...) znači da ako in.read(...) vrati vrednost -1 znači ništa nije učitano(prazno, nema odgovora), ali to se pročita u Java API dokumentaciji, glupo je išta pamtiti. Znači potražiš objašnjenje za klasu InputStream i pročitaš osnovne napomene o metodi read(...)

Ako te zbunjuje ono:
throw new SocketException(...),
ipak moram da te uputim na čitanje. Exceptioni su jedan od osnovnih koncepata Jave, služe za signaliziranje "grešaka", ali bi zahtevalo stvarno puno napora da se objasne preko ovog foruma. Na internetu ima mnogo jako lepih uvodnih tekstova, i savetujem ti da ih pročitaš.




 
Odgovor na temu

miros21k

Član broj: 22204
Poruke: 21
*.dsl.pipex.com.



Profil

icon Re: Tcp Echo Client Helpppp14.03.2005. u 18:00 - pre 232 meseci
Znaci ovde ako sam te dobro razumeo
Code:
int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;


Ako je tacno args[2] ce biti taj port broj prebacen u integers sa Integer.parseInt
a ako nije tacno default port broj je 7?

Taj ? i 7 me zbunjuju.


I kod if pitalice, kuzim ja da ako je in.read==-1 da ce izbaciti taj Exeption (znam sta su oni), ali ne kontam ono u zagradi
(byteBuffer, totalBytesRcvd,byteBuffer.length - totalBytesRcvd)
zasto trebaju byteBuffer, totalBytesRcvd, ovo byteBuffer.lenght-totalBytesRcvd isto razumem, ali prva dva ne.
Zasto su ona tu i sta ona znace u toj "jednadzbi" koja proverava da li je sta ukucano ili nije.

Hvala jos jednom.
P.S. Ako znas neki sajtove od tih "lepih uvodnih tekstova" rado bi da procitam.
 
Odgovor na temu

dacho
Montreal

Član broj: 4096
Poruke: 38
*.dialup.sprint-canada.net.



Profil

icon Re: Tcp Echo Client Helpppp15.03.2005. u 16:44 - pre 232 meseci
Za pocetak, cmd line arguments: java ime_programa args[0] args[1] args[2]

Citat:
int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;

Ako imas tacno 3 argumenta u listi argumenata koja je poslana sa cmd line, uzmes treci argument iz te liste. Ako ne, servPort ce biti 7. Isto je kao da si napisao:

Code:

int servPort;

if(args.length == 3)
     servPort = Integer.parseInt(args[2]);
else
     servPort = 7;    



Za drugi dio pitanja in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd)) moras pogledati Javadoc za InputStream klasu http://java.sun.com/j2se/1.4.2.../io/InputStream.html#read(byte[],%20int,%20int).

 
Odgovor na temu

miros21k

Član broj: 22204
Poruke: 21
*.dsl.pipex.com.



Profil

icon Re: Tcp Echo Client Helpppp15.03.2005. u 19:59 - pre 232 meseci
Hvala logotet Hvala dacho pomogli ste ;)
 
Odgovor na temu

[es] :: Java :: Tcp Echo Client Helpppp

[ Pregleda: 2008 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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