Avatar billede anders8271 Nybegynder
08. april 2006 - 13:56 Der er 42 kommentarer og
1 løsning

Kommando til serveren (simpelt)

Hejsa, jeg er ny indefor java og har en webserver..

Har hentet følgende kode til at starte og lytte på en port:

import java.io.*;
import java.net.*;


public class simpleServer
{
public static void main(String args[])
{
// Message terminator
char EOF = (char)0x00;

try
{
// create a serverSocket connection on port 9999
ServerSocket s = new ServerSocket(9999);

System.out.println("startet..");
// wait for incoming connections
Socket incoming = s.accept();

BufferedReader data_in = new BufferedReader(
new InputStreamReader(incoming.getInputStream()));
PrintWriter data_out = new PrintWriter(incoming.getOutputStream());

data_out.println("Welcome! type EXIT to quit." + EOF);
data_out.flush();

boolean quit = false;

// Waits for the EXIT command
while (!quit)
{
String msg = data_in.readLine();

if (msg == null) quit = true;

if (!msg.trim().equals("EXIT"))
{
data_out.println("You sayed: "+msg.trim()+""+EOF);
data_out.flush();
}
else
{
quit = true;
}
}
}
catch (Exception e)
{
System.out.println("Connection lost");
}
}
}









Men jeg vil gerne have den til at sige:
hvis indkommende data er fx:
user,1,Anders,123,210,bil02.gif

så skal den gå til funktionen i mit java program "newuser" med følgende paramenter..

Er det for meget og forlange?
Avatar billede anders8271 Nybegynder
08. april 2006 - 14:00 #1
noget i stil med
public void newuser(int id, String navn, int xpos, int ypos, String graphic)
{
    ...
}
Avatar billede javaisnice Nybegynder
08. april 2006 - 14:07 #2
Det må være noget i stil med dette:

if(msg.equals("newUser")){

  blabla.newUser("", etc.);
}
Avatar billede anders8271 Nybegynder
08. april 2006 - 14:08 #3
Og hvad skal blabla forestille? :)

Kan du ikke give et hurtigt testeksempel til det, med de paramenter jeg gav?
user,1,Anders,123,210,bil02.gif
Avatar billede javaisnice Nybegynder
08. april 2006 - 15:12 #4
Ok...jeg det var heller ikke særligt præcist af mig. Nedenstående eksempel viser hvordan du kan gøre det såfremt du vil læse det som en string, hviklet er helt fint, alternativet er at du læser det som et objekt, men det er lidt mere komplekst hvis du er nybegynder.

String[] str = msg.split("");
   
    String user = str[0];
    String id = str[1];
    String xPos = str[2];
    String yPos = str[3];
    String graphic = str[4];
   
    /*herefter kalder du din newUser metode hvis det er nødvendigt kan du lave de nødvendige parametre om til int
    på denne måde:
    int intId = Integer.parseInt(id);
    */
   
    klasse.newUser(user, id, xPos, yPos, graphic);
Avatar billede javaisnice Nybegynder
08. april 2006 - 15:13 #5
String[] str = msg.split(","); i stedet for: String[ str = msg.split("");
Avatar billede anders8271 Nybegynder
08. april 2006 - 15:37 #6
Nu hvor jeg er ikke er god, men den kode forstod jeg massere af - mange tak!

Men altså  - klasse.newUser - hvad hvis den ene fil kører fra en cmd og det andet på en internet side (applet)

Hvordan gøres dette så?
Avatar billede javaisnice Nybegynder
08. april 2006 - 15:51 #7
Så skal din applet oprette en forbindelse til den server du har lavet, og aktiver metoden newUser()
Avatar billede anders8271 Nybegynder
08. april 2006 - 16:25 #8
Hvordan kan jeg så i min applet sige den skal skrive til den anden fil?

Altså sende fx. "user,1,Anders,123,210,bil02.gif" til port 9999 ?
Avatar billede anders8271 Nybegynder
08. april 2006 - 16:45 #9
Det er vel bare ikke:
sock = new Socket("localhost", 9999);
sock.send("user,1,Anders,123,210,bil02.gif");

vel ?
Avatar billede javaisnice Nybegynder
08. april 2006 - 16:56 #10
Så vidt jeg ved er der ikke en metode der hedder send() i Socket - du skal derimod gøre brug af en BufferedOutputStream - eksempel:

Socket socket = new Socket("localhost", 9999);
output = new BufferedOutputStream(socket.getOutputStream());
output.write((user,1,Anders,123,210,bil02.gif).getBytes());
output.flush();
Avatar billede anders8271 Nybegynder
08. april 2006 - 16:57 #11
Okay tak.
Vil lige kigge på det - men skal der ikke gåseøjne rundt om det der skal sendes?
Avatar billede anders8271 Nybegynder
08. april 2006 - 16:59 #12
Hvad hedder importen nu?

import java.io.*;

eller lignende.?
Avatar billede anders8271 Nybegynder
08. april 2006 - 17:02 #13
Ville det ikke være nemmere med en funktion hvor der kunne sendes hele tiden egenlig?

Har lavet:

      public void send(String data)
      {
          output = new BufferedOutputStream(socket.getOutputStream());
          output.write((data).getBytes());
          output.flush();
      }

Og øverst:

  Socket socket = new Socket("localhost", 9999);
Avatar billede javaisnice Nybegynder
08. april 2006 - 17:11 #14
Jo der skal gåseøjne rundt om.

du skal både importere java.io.*, og java.net.*
Avatar billede anders8271 Nybegynder
08. april 2006 - 17:16 #15
Okay - så det gjort :)

      public void send(String data)
      {
          output = new BufferedOutputStream(socket.getOutputStream());
          output.write((data).getBytes());
          output.flush();
      }

        Så siger den den ikke kan finde "output"

I min public init laver jeg:
send("user,1," + brugernavn + ",5,5,normal.gif");
Avatar billede javaisnice Nybegynder
08. april 2006 - 17:49 #16
Det er vel fordi den ikke er deklareret - BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());
Avatar billede anders8271 Nybegynder
08. april 2006 - 18:04 #17
Unreported  exception java.net.UnknowHostException; must be caught or declared  to be thrown..

det siger den ved

Socket socket = new Socket("localhost", 9999);

Det må være det med try { .. } catch(Exception e) { .. }

Men hvordan skal det så se ud?
Avatar billede anders8271 Nybegynder
08. april 2006 - 18:29 #18
public class test extends Applet implements MouseListener
{
try {
Socket socket = new Socket("localhost", 9999);
} catch(Exception e) {
System.out.println(e);
}

...

Så siger den bare "Illegal start of type"
Avatar billede javaisnice Nybegynder
08. april 2006 - 18:31 #19
Således:

try{

Socket socket = new Socket("localhost", 9999);
output = new BufferedOutputStream(socket.getOutputStream());
output.write((data).getBytes());
output.flush();

}catch(UnknownHostException ex){ex.printStackTrace();}
Avatar billede anders8271 Nybegynder
08. april 2006 - 18:34 #20
Siger det samme.. :(
Skal den være i public class test ... osv?
Avatar billede anders8271 Nybegynder
08. april 2006 - 18:36 #21
public void send(String data)
      {
          try{

Socket socket = new Socket("localhost", 9999);
output = new BufferedOutputStream(socket.getOutputStream());
output.write((data).getBytes());
output.flush();

}catch (UnknownHostException ex){ex.printStackTrace();
}
}


udskriver cannot find symbol - variable output
Avatar billede javaisnice Nybegynder
08. april 2006 - 18:37 #22
Prøv lige at vise hele klassen
Avatar billede anders8271 Nybegynder
08. april 2006 - 18:37 #23
Er det ikke også dumt den hver gang skal oprette forbindelse ved send af flere kommando da???

Kan det ikke gøres smartere
Avatar billede anders8271 Nybegynder
08. april 2006 - 18:40 #24
Fjernet det hemmelige, men stadig en oversigt..



import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class client extends Applet implements MouseListener
{
Image figur;
Image offScreen;
Graphics bufferGfx;
Image baggrund;
Point mouseDown = null;
String brugernavn;

    public void init()
    {

        brugernavn = getParameter("brugernavn");

        send("user,1," + brugernavn + ",5,5,normal.gif");
        // noget
    }

      public void send(String data)
      {
          try{

Socket socket = new Socket("localhost", 9999);
output = new BufferedOutputStream(socket.getOutputStream());
output.write((data).getBytes());
output.flush();

}catch(UnknownHostException ex){ex.printStackTrace();}
      }
      public void paint(Graphics g)
      {
      // her kommer noget
      } 
 
 
 
 
  public void mousePressed(MouseEvent e)
{
    mouseDown = new Point((int) e.getX(), (int) e.getY());
    repaint();
}


  public void mouseCliched(MouseEvent e)
{
    mouseDown = new Point((int) e.getX(), (int) e.getY());
    repaint();
}


   
      public void update (Graphics g)
      {
          paint(g);
      }


      public void mouseClicked(MouseEvent e)    {}
      public void mouseReleased(MouseEvent e) {}
      public void mouseEntered(MouseEvent e)    {}
      public void mouseExited(MouseEvent e)    {}
}
Avatar billede javaisnice Nybegynder
08. april 2006 - 18:42 #25
Hvis du har flere kommandoer kan du jo bare sende dem inden du kalder flush()
Avatar billede anders8271 Nybegynder
08. april 2006 - 18:45 #26
Ja, men den siger stadig væk den fejl der..
udskriver cannot find symbol - variable output
i :
output = new BufferedOutputStream(socket.getOutputStream());
Avatar billede javaisnice Nybegynder
08. april 2006 - 18:54 #27
Så er dte nok fordi du ikke har deklareret den -
BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());
Avatar billede anders8271 Nybegynder
08. april 2006 - 18:56 #28
public void send(String data)
      {
          try{

Socket socket = new Socket("localhost", 9999);
BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());
output.write((data).getBytes());
output.flush();

}catch(UnknownHostException ex){ex.printStackTrace();}
      }



så siger den ..
unreported  exception java.io.IOEXCEPTION; must be caught or decalred to be a thrown
Avatar billede javaisnice Nybegynder
08. april 2006 - 19:08 #29
Den skal du ogå catche på samme måde som UnknownHostException - du tilføjer bare endnu en catchblok under der hvor du catcher UnknownHostException.
         
        } catch (UnknownHostException IOException ex) {
                ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
                ex.printStackTrace();

        }
Avatar billede anders8271 Nybegynder
08. april 2006 - 19:10 #30
')'  excepted siger den i

  } catch (UnknownHostException IOException ex) {

det passer da ikke?
Avatar billede javaisnice Nybegynder
08. april 2006 - 19:15 #31
du mangler nok en "}" til sidst
Avatar billede anders8271 Nybegynder
08. april 2006 - 19:17 #32
Nej?


      public void send(String data)
      {
          try
          {

                Socket socket = new Socket("localhost", 9999);
                BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());

                output.write((data).getBytes());
                output.flush();

                } catch (UnknownHostException IOException exx) {
                  exx.printStackTrace();
                  } catch (ClassNotFoundException ex) {
                ex.printStackTrace();

                  }
            }
      }
}
Avatar billede javaisnice Nybegynder
08. april 2006 - 19:29 #33
Jeg har vidst også været lidt for hurtig med copy/paste der skal stå følgende:

} catch (UnknownHostException exx) {
                exx.printStackTrace();
} catch (ClassNotFoundException ex) {
                ex.printStackTrace();

                  }
Avatar billede anders8271 Nybegynder
08. april 2006 - 19:32 #34
forsatan alle de fejl.. nu siger den 'class' or 'interface' expected..

og det er ved det sidste }

Har prøvet at sætte 1, 2,3 mere på, og prøvet fjernet 1,2,3.. men siger det samme
Avatar billede javaisnice Nybegynder
08. april 2006 - 19:34 #35
Enten er der for mange eller for få krøllede paranteser :-)
Avatar billede anders8271 Nybegynder
08. april 2006 - 19:36 #36
exception java.lang.ClassNotFoundException is never thrown in body of corresponding try statement
Avatar billede javaisnice Nybegynder
08. april 2006 - 19:37 #37
så er den ikke nødvendig at catche...du skal kun catche dem der er nødvendige
Avatar billede anders8271 Nybegynder
08. april 2006 - 19:40 #38
jamen ... jeg er jo ny, ved intet om catching om hvor jeg ser hvilke der skal..

kan du eventuelt få denne kode til at mache, så den ikke melder fejl? Så smider jeg 150 point oveni..


    public void send(String data)
      {
          try
          {

                Socket socket = new Socket("localhost", 9999);
                BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());

                output.write((data).getBytes());
                output.flush();

            }
        }
Avatar billede javaisnice Nybegynder
08. april 2006 - 19:50 #39
Nedenstående ser ud til at være alt der behøves, så du var ikke så lang fra :)


  public void send(String data) {
          try {

                Socket socket = new Socket("localhost", 9999);
                BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());
                output.write((data).getBytes());
                output.flush();

            }catch (IOException ioe){
                ioe.printStackTrace();
            }
        }
Avatar billede anders8271 Nybegynder
08. april 2006 - 19:55 #40
Mange tak, utrolig god hjælp fra din side.

Har så bare endnu et problem..

   
    public void newuser(int id, String brugernavn, int xpos, int ypos, String figur)
    {
            bufferGfx.drawImage(figur, xpos, ypos, this);   
            bufferGfx.drawString(brugernavn, xpos, ypos+70);
    }

Så siger den:
cannot find symbol - method drawImage(java.lang.String,int, int, client)

ved:

bufferGfx.drawImage(figur, xpos, ypos, this);
Avatar billede javaisnice Nybegynder
08. april 2006 - 20:01 #41
Umiddelbart kender jeg ikke så meget til applets, men det må være parametrene der er af forkert type....
Avatar billede anders8271 Nybegynder
08. april 2006 - 20:17 #42
Smider du svar!
Avatar billede javaisnice Nybegynder
08. april 2006 - 20:27 #43
jo tak :-)
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