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?
Annonceindlæg fra Novataris
08. april 2006 - 14:00
#1
noget i stil med public void newuser(int id, String navn, int xpos, int ypos, String graphic) { ... }
08. april 2006 - 14:07
#2
Det må være noget i stil med dette: if(msg.equals("newUser")){ blabla.newUser("", etc.); }
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
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);
08. april 2006 - 15:13
#5
String[] str = msg.split(","); i stedet for: String[ str = msg.split("");
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å?
08. april 2006 - 15:51
#7
Så skal din applet oprette en forbindelse til den server du har lavet, og aktiver metoden newUser()
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 ?
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 ?
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();
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?
08. april 2006 - 16:59
#12
Hvad hedder importen nu? import java.io.*; eller lignende.?
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);
08. april 2006 - 17:11
#14
Jo der skal gåseøjne rundt om. du skal både importere java.io.*, og java.net.*
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");
08. april 2006 - 17:49
#16
Det er vel fordi den ikke er deklareret - BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());
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?
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"
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();}
08. april 2006 - 18:34
#20
Siger det samme.. :( Skal den være i public class test ... osv?
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
08. april 2006 - 18:37
#22
Prøv lige at vise hele klassen
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
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) {} }
08. april 2006 - 18:42
#25
Hvis du har flere kommandoer kan du jo bare sende dem inden du kalder flush()
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());
08. april 2006 - 18:54
#27
Så er dte nok fordi du ikke har deklareret den - BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());
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
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(); }
08. april 2006 - 19:10
#30
')' excepted siger den i } catch (UnknownHostException IOException ex) { det passer da ikke?
08. april 2006 - 19:15
#31
du mangler nok en "}" til sidst
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(); } } } }
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(); }
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
08. april 2006 - 19:34
#35
Enten er der for mange eller for få krøllede paranteser :-)
08. april 2006 - 19:36
#36
exception java.lang.ClassNotFoundException is never thrown in body of corresponding try statement
08. april 2006 - 19:37
#37
så er den ikke nødvendig at catche...du skal kun catche dem der er nødvendige
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(); } }
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(); } }
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);
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....
08. april 2006 - 20:17
#42
Smider du svar!
08. april 2006 - 20:27
#43
jo tak :-)
Kurser inden for grundlæggende programmering