Avatar billede casualty Nybegynder
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());
    }
  }
}
Avatar billede funkyloonie Nybegynder
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());
    }
  }
}
Avatar billede funkyloonie Nybegynder
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.
Avatar billede funkyloonie Nybegynder
30. november 2002 - 18:09 #3
Desuden bør du for hver modtagen pakke på socket afvikle handlingen/udskrivningen i en streng.
Avatar billede casualty Nybegynder
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....
Avatar billede funkyloonie Nybegynder
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.
Avatar billede funkyloonie Nybegynder
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.
Avatar billede casualty Nybegynder
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?
Avatar billede casualty Nybegynder
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....
Avatar billede arne_v Ekspert
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) {
            }
        }
    }
}
Avatar billede casualty Nybegynder
30. november 2002 - 18:31 #10
Kigger lige på det :)
Avatar billede funkyloonie Nybegynder
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.
Avatar billede arne_v Ekspert
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
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