Avatar billede pentium Nybegynder
01. august 2005 - 19:12 Der er 12 kommentarer og
1 løsning

Server og Klient

Hejsa

Arbejde i jBuilder 2005.

Jeg er ved at lave et server program og en klient del.
Serveren.

Server Delel:

package server;
import java.net.ServerSocket;
import java.net.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;

class Server {
  public static void main(String[] args) {
ServerSocket minserver = null;
    try {
        minserver = new ServerSocket(3333);
        System.out.println("Port Nummer" + ":" + minserver);
        }
catch (IOException e) {
        System.out.println("Could not listen on port: 3333");
        System.exit(-1);
}

Socket clientSocket = null;

try {
        clientSocket = minserver.accept();
}
catch (IOException e) {
        System.out.println("Accept failed: 3333");
}

  PrintWriter out = null;
  try {
    out = new PrintWriter(clientSocket.getOutputStream(), true);
  }
  catch (IOException ex1) {
  }
  BufferedReader in = null;
  try {
    in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  }
  catch (IOException ex2) {
  }
  String inputLine, outputLine;
  BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

  try {
    while ( (inputLine = in.readLine()) != null) {
      System.out.println(inputLine);
      outputLine = stdIn.readLine();
      out.println(outputLine);
      if (outputLine.equals("Bye.")) {
        break;
      }

    }
    System.out.println("Server Lukker og Slukker");
    out.close();
    in.close();
    stdIn.close();
    minserver.close();
  }
  catch (IOException ex) {
  }
    }
}

Klient Delen:

package klient;
import java.net.ServerSocket;
import java.net.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;

class Klient {
  public static void main(String[] args) {

    /**Lokal Maskine IP*/
      String localMachineIP = "";

    /**Ip Adresen Fra den Locale Maskine Start*/
    try
      {
      java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();
      localMachineIP = localMachine.getHostAddress();
      System.out.println("Klient IP: " + localMachineIP);
      }
      catch(java.net.UnknownHostException uhe)
      {
      System.out.println("Fejl ved hentning af Local IP");
      }
    /**Ip Adresen Fra den Locale Maskine Slut*/

    /**Opretter og starter JegLever tråd start*/
    JegLever JegLever1 = new JegLever();
    Thread JegLeverTraad;
    JegLeverTraad = new Thread(JegLever1);
    JegLeverTraad.start();
    /**Opretter og starter JegLever tråd slut*/

    /**Opretter og starter klient socket start*/
    Klient klient = new Klient();
    Socket echoSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;
    /**Opretter og starter klient socket slut*/

    try {
      echoSocket = new Socket("127.0.0.1", 3333);
          out = new PrintWriter(echoSocket.getOutputStream(), true);
          in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
  }
  catch (UnknownHostException e) {
          System.err.println("Kender ikke til Host: " + echoSocket);
  }
  catch (IOException e) {
          System.err.println("Kunne ikke forbinde til : ServerIPadresse på port: " + 3333);
          System.err.println("Venter på server...");
}
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

String userInput;

try {
  while ( (userInput = stdIn.readLine()) != null) {
    out.println(userInput);
    System.out.println("SunServer: " + in.readLine());
  }
}
catch (IOException ex) {
}
    System.out.println("Klient Lukker og Slukker");
      out.close();
    try {
      in.close();
    }
    catch (IOException ex1) {
    }
    try {
      stdIn.close();
    }
    catch (IOException ex2) {
    }
    try {
      echoSocket.close();
    }
    catch (IOException ex3) {
    }
    }
  }

Tråd i Klient:

package klient;

import java.io.PrintWriter;
import java.net.Socket;
import java.io.BufferedReader;

/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class JegLever implements Runnable{
    PrintWriter out = null;
    String HoldILive = "hest";

  public JegLever() {
    try {
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  public static void main(String[] args) {
    JegLever jeglever = new JegLever();
      }
  public void run() {

while (true)
{

    // out.println(HoldILive);
  // System.out.println("SunServer: " + in.readLine());

  try {
    Thread.sleep(2000);
  }
  catch (InterruptedException ex) {
  }
}
  }

  private void jbInit() throws Exception {
  }
}


Det jeg gerne vil op nå er følgende: At når klienten starter op, skal den automatisk sende en streng feks. "Alive".
Når serverne registrer "Alive", skal serveren sende et svar tilbage, en stregn feks. "OK"

Men når jeg starter klienten op, skal jeg trykke på enter tasten før komunikationen er oprettet.

Nogle der har nogel ider til at hjælpe mig?
Avatar billede arne_v Ekspert
01. august 2005 - 19:19 #1
Jeg kan ikke finde, hvor du sender "Alive" !?
Avatar billede arne_v Ekspert
01. august 2005 - 19:20 #2
PS: Jeg tror at koden ville blive mere læselig og formentlig også nemmere at fejlfinde,
hvis du putte hele metoden i en enkelt try catch og i.s.f. din tekst udskriver
den faktiske exception
Avatar billede pentium Nybegynder
01. august 2005 - 19:22 #3
Jeg har ikke brugt "Alive" nogle steder. Mmen har prøvet med følgende:

  // out.println(HoldILive);
  // System.out.println("SunServer: " + in.readLine());

Jeg går ud fra at min klient skal sende uden bruger input og serveren skal modtage uden bruger indput.
Avatar billede arne_v Ekspert
01. august 2005 - 19:24 #4
ja, hvis du skriver til en socket og (vigtigt !) kalder flush så skulle du sagtens
kunne sende inden du læser noget
Avatar billede pentium Nybegynder
01. august 2005 - 19:30 #5
OK - men det er der jeg strænder lidt - har du en anden ide til hvordan jeg kunne gøre dette?
Avatar billede arne_v Ekspert
01. august 2005 - 19:35 #6
oppe i Klient er det vel bare:

    try {
      echoSocket = new Socket("127.0.0.1", 3333);
          out = new PrintWriter(echoSocket.getOutputStream(), true);
          out.println("alive");
          out.flush();
Avatar billede arne_v Ekspert
01. august 2005 - 19:35 #7
hvis det er i JegLever klassen så skal du vente med at constructe den til du
har din socket så du kan sende den med i constructor
Avatar billede pentium Nybegynder
01. august 2005 - 19:46 #8
"hvis det er i JegLever klassen så skal du vente med at constructe den til du
har din socket så du kan sende den med i constructor"

Forstår jeg Sq ikke helt?
Avatar billede arne_v Ekspert
01. august 2005 - 19:58 #9
public JegLever(PrintWriter out) {
    try {
      jbInit();
      this.out = out;
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

og

    /**Opretter og starter klient socket start*/
    Klient klient = new Klient();
    Socket echoSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;
    /**Opretter og starter klient socket slut*/

    try {
      echoSocket = new Socket("127.0.0.1", 3333);
          out = new PrintWriter(echoSocket.getOutputStream(), true);
          in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
    JegLever JegLever1 = new JegLever(out);
    Thread JegLeverTraad;
    JegLeverTraad = new Thread(JegLever1);
    JegLeverTraad.start();
Avatar billede pentium Nybegynder
01. august 2005 - 20:23 #10
Okai - jeg prøver lige at arbejde med det.

oppe i Klient er det vel bare:

    try {
      echoSocket = new Socket("127.0.0.1", 3333);
          out = new PrintWriter(echoSocket.getOutputStream(), true);
          out.println("alive");
          out.flush();

Virker ind til vider.
Avatar billede arne_v Ekspert
01. august 2005 - 20:41 #11
jep
Avatar billede pentium Nybegynder
02. august 2005 - 21:05 #12
Hej Arne - Det hele virkede efter jeg havde sadt lidt med det.

Så det er dine point.

Men lige et spørgsmål til.

Hvis jeg vil have en klient til på serveren. Så der er 2 klienter på, skal jeg så bare åbne for socket nr. 2?
Avatar billede arne_v Ekspert
02. august 2005 - 21:09 #13
normalt vil man putte en while løkke omkring accept så serveren kan klare
vilkårligt mange klienter

og 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
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