30. november 2002 - 17:35
Der er
11 kommentarer og 1 løsning
Modtage inputstreams med serversocket.....
Jeg har læst og læst, for at finde ud af hvorledes jeg får min serverklasse til at modtage og udskrive flere inputs i træk...Den virker og udskriver en string hvis den bliver sendt til den... Er der nogen der vil omskrive min klasse således at den bliver ved med at udskrive hver gang der bliver sendt noget til den? Den skal lytte udskrive lytte videre udskrive osv.... Det kunne være fedt hvis der var nogen der gad at lave det for mig, så kan jeg pille det fra hinanden og prøve at gennemskue hvordan det virker bagefter... Mvh Casualty -------------------------------Kode package Clientserver; import java.io.*; import java.net.*; import java.util.*; import java.lang.*; public class Server { public Server() { } public static void main(String args[]) { ServerSocket ser=null; Socket soc=null; String str=null; try { ser=new ServerSocket(7777); soc=ser.accept(); InputStream o=soc.getInputStream(); ObjectInput s=new ObjectInputStream(o); str=(String) s.readObject(); System.out.println(str); } catch(Exception e) { System.out.println(e.getMessage()); } } }
Annonceindlæg fra Barco
30. november 2002 - 18:06
#1
package Clientserver; import java.io.*; import java.net.*; import java.util.*; import java.lang.*; public class Server { public Server() { } public static void main(String args[]) { ServerSocket ser=null; Socket soc=null; String str=null; try { ser=new ServerSocket(7777); soc=ser.accept(); while(true) { InputStream o=soc.getInputStream(); ObjectInput s=new ObjectInputStream(o); str=(String) s.readObject(); System.out.println(str); } } catch(Exception e) { System.out.println(e.getMessage()); } } }
30. november 2002 - 18:07
#2
Måske skal while løkken placeres lidt anderledes. dete r et stykke tid siden jeg selv har arbejdet med sockets. int serverPort = 6001; ServerSocket listenSocket = new ServerSocket(serverPort); while(true) { Socket clientSocket = listenSocket.accept(); Connection c = new Connection(clientSocket, raf); } herover er min stump kode som du måske kan bruge.
30. november 2002 - 18:09
#3
Desuden bør du for hver modtagen pakke på socket afvikle handlingen/udskrivningen i en streng.
30. november 2002 - 18:16
#4
Det virker...Kanont....Kan du forklare mig hvordan det kan være at server programmet afsluttes når clienten bryder forbindelsen? Det ville være rart hvis det bare kunne blive ved med at køre....
30. november 2002 - 18:20
#5
hvis du har en system.exit(0) så prøv at fjerne den. min server kan sagtens køre uden at den stoppes når klienten/klienter logger af.
30. november 2002 - 18:24
#6
måske er det noget med opbygningen af programmet. hvis serveren først kommer ind i while-løkken når klienten logger på kan det være at dit system er kodet således at løkken-afsluttes når klienten logger af.
30. november 2002 - 18:24
#7
Hmm Det er hele koden der står ovenover...Der er ingen "System.exit" i.. Kan det være fordi at den ligger i min main og fanger den første der kontakter den, og når forbindelsen bliver afbrudt har den ikke noget at leve for?
30. november 2002 - 18:26
#8
Ja Det lyder logisk....Jeg prøver lidt videre....Men tak for hjælpen...Jeg havde en ide om at jeg skulle begynde at arbejde med tråde...Sådan var det ikke....
30. november 2002 - 18:30
#9
For at håndtere en connection en client som sender mange string objects: import java.io.*; import java.net.*; import java.util.*; public class Server { public Server() { } public static void main(String args[]) { try { ServerSocket ss = new ServerSocket(7777); Socket s = ss.accept(); ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); for(;;) { String str = (String)ois.readObject(); System.out.println(str); } } catch (StreamCorruptedException e) { } catch (OptionalDataException e) { } catch (IOException e) { } catch (ClassNotFoundException e) { } } } For at håndtere mange connections fra mange clients som sender et string object: import java.io.*; import java.net.*; import java.util.*; public class Server { public Server() { } public static void main(String args[]) { ServerSocket ss = null; try { ss = new ServerSocket(7777); } catch (IOException e) { } for (;;) { try { Socket s = ss.accept(); ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); String str = (String) ois.readObject(); System.out.println(str); s.close(); } catch (StreamCorruptedException e) { } catch (OptionalDataException e) { } catch (IOException e) { } catch (ClassNotFoundException e) { } } } }
30. november 2002 - 18:31
#10
Kigger lige på det :)
30. november 2002 - 18:31
#11
import java.net.*; import java.io.*; import javax.swing.*; public class TCPServer { private static RandomAccessFile raf; public static int cl = 10; public static void main(String args[]) { try { raf = new RandomAccessFile("Clients.txt", "rw"); Client cc; for(int i = 0; i < cl; i++) cc = new Client(raf, cl); int serverPort = 6001; ServerSocket listenSocket = new ServerSocket(serverPort); while(true) { Socket clientSocket = listenSocket.accept(); Connection c = new Connection(clientSocket, raf); } } catch(IOException e) {System.out.println("Listen: " + e.getMessage());} } } class Connection extends Thread { static RandomAccessFile fil; static int num; static Client cli; DataInputStream in; Socket clientSocket; public Connection ( Socket aClientSocket, RandomAccessFile f) { fil = f; try { clientSocket = aClientSocket; in = new DataInputStream(clientSocket.getInputStream()); this.start(); } catch(IOException e) {System.out.println("Connection: " + e.getMessage());} } public void run() { try { String data = in.readUTF(); if(data.substring(0, 1).equals("0")) data = splitString(data.substring(1, data.length()), fil); else if(data.substring(0, 1).equals("1")) data = data.substring(1, data.length()); else { data = data.substring(1, data.length()); } System.out.println(data); for(int i = 0; i < num; i++) { System.out.println(cli.getIP(num) + " " + cli.getPort(num)); ServerSend se = new ServerSend(data, i); } } catch (NullPointerException e) {System.out.println("nullEXP " + e.getMessage()); } catch ( EOFException e) { System.out.println("EOF: " + e.getMessage()); } catch ( IOException e ) { System.out.println("IO: " + e.getMessage()); } finally { try {clientSocket.close();} catch(IOException e){System.out.println("IOE closeSocket: " + e.getMessage());} } } public String splitString(String d, RandomAccessFile rfil) throws IOException{ int place = -1; String ip, name, port; for( int i = 0; i < d.length(); i++) { if( d.substring(i, i + 1).equals(",") ) { place = i; break; } } ip = d.substring(0, place ); d = d.substring(place, d.length()); for( int i = 0; i < d.length(); i++) { if( d.substring(i, i + 1).equals(",") ) place = i; } name = d.substring(1, place ); port = d.substring(place + 1, d.length()); cli = new Client(ip, name, port, rfil); String re = cli.getUserName(num) + " logged on."; num++; return re; } } Her er hele min fil. der mangler måske nogle klasser som jeg har kodet men du burde kunne se ideen med tråde hvis du har brug for det.
30. november 2002 - 18:32
#12
Du skal arbejde med tråde, hvis: 1) Du får mange connections fra mange clients 2) Det er hensigsmæssigt af performance-hensyn at processe disse connections parallelt i.s.f. serielt
Kurser inden for grundlæggende programmering