Avatar billede ladyhawke Novice
26. marts 2001 - 13:10 Der er 10 kommentarer og
1 løsning

læs fil fra socket

Jeg vil gerne læse en vilkårlig fil (f.eks. \".bmp\") fra en socket forbindelse. Client bliver lavet i Visual C++ og Server (skal læse filen) laves i Java. Hvordan laver jeg et program der kan læse en fil der modtages som en strøm af bytes?
Avatar billede disky Nybegynder
26. marts 2001 - 13:16 #1
er det clienten eller serveren du spørger om ?
Avatar billede ladyhawke Novice
26. marts 2001 - 13:20 #2
det er serveren! som jeg skal skrive i Java (jeg kan lave client som jeg vil...)
Avatar billede disky Nybegynder
26. marts 2001 - 13:24 #3
Et godt sted at starte med at læse er:
http://java.sun.com/docs/books/tutorial/networking/sockets/index.html

Der står alt hvad du har brug for
Avatar billede ladyhawke Novice
26. marts 2001 - 13:27 #4
Der har jeg været, men jeg vil læse fil ikke overføre tekst mellem server og client. Det var også nemmere hvis både client og server var i Java men det er ikke teknisk muligt i dette tilfælde
Avatar billede disky Nybegynder
26. marts 2001 - 13:30 #5
på de sider står der hvordan man laver en server der lytter på en bestemt port.

Når du har den socket oprettet, beder du om at få den\'s outputstream.

Ud fra denne output stream og den protokol du selvfølgelig har lavet, ved du så hvornår noget er kommandoer og hvornår det er billeder.

Ud fra denne viden fører du så billeder til f.eks. en binær fil.

Unskyld jeg siger det, men man skal altså også lave lidt selv :-)
Avatar billede ladyhawke Novice
26. marts 2001 - 13:39 #6
Du behøver ikke være grov! Jeg ved godt jeg skal lave noget selv (det har jeg også gjort), jeg manglede bare \"the-missing-link\" mellem den stream jeg får fra client og en samlet fil modtaget på serveren
Avatar billede disky Nybegynder
26. marts 2001 - 13:41 #7
hov hov, jeg havde en Smiley bagefter

Men undskyld hvis jeg var grov, det var ikke meningen
Avatar billede ladyhawke Novice
26. marts 2001 - 13:45 #8
Jeg har følgende \"framework\" til løsning af problemet, men hvordan skal den modificeres til at læsen en strøm af bytes og samle dem til et billede? Protokollen kan laves som det er mest praktisk (f.eks. fil-type, bytes (selve filen) og en afslutning (eof):

class ClientWorker implements Runnable {
  private Socket client;
  private JTextArea textArea; (SKAL ERSTATTES AF BILLEDFELT)
 
  ClientWorker(Socket client, JTextArea textArea) {
  this.client = client;
  this.textArea = textArea; 
  }

  public void run(){
    String line;
    BufferedReader in = null;
    PrintWriter out = null;
    try{
      in = new BufferedReader(new InputStreamReader(client.getInputStream()));
      out = new PrintWriter(client.getOutputStream(), true);
    } catch (IOException e) {
      System.out.println(\"in or out failed\");
      System.exit(-1);
    }

    while(true){
      try{
        line = in.readLine();
        //Send data back to client
        out.println(line);
        textArea.append(line);
      } catch (IOException e) {
        System.out.println(\"Read failed\");
        System.exit(-1);
      }
    }
  }
}

class SocketThrdServer extends JFrame{

  JLabel label = new JLabel(\"Text received over socket:\");
  JPanel panel;
  JTextArea textArea = new JTextArea();
  ServerSocket server = null;

  SocketThrdServer(){ //Begin Constructor
    panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.setBackground(Color.white);
    getContentPane().add(panel);
    panel.add(\"North\", label);
    panel.add(\"Center\", textArea);
  } //End Constructor

  public void listenSocket(){
    try{
      server = new ServerSocket(5555);
    } catch (IOException e) {
      System.out.println(\"Could not listen on port 5555\");
      System.exit(-1);
    }
    while(true){
      ClientWorker w;
      try{
        w = new ClientWorker(server.accept(), textArea);
        Thread t = new Thread(w);
        t.start();
      } catch (IOException e) {
        System.out.println(\"Accept failed: 5555\");
        System.exit(-1);
      }
    }
  }

  protected void finalize(){
//Objects created in run method are finalized when
//program terminates and thread exits
    try{
        server.close();
    } catch (IOException e) {
        System.out.println(\"Could not close socket\");
        System.exit(-1);
    }
  }

  public static void main(String[] args){
        SocketThrdServer frame = new SocketThrdServer();
    frame.setTitle(\"Server Program\");
        WindowListener l = new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                        System.exit(0);
                }
        };
        frame.addWindowListener(l);
        frame.pack();
        frame.setVisible(true);
        frame.listenSocket();
  }
}
Avatar billede disky Nybegynder
26. marts 2001 - 13:49 #9
Jeg ved ikke lgie hvordan du skal gøre det i dit eksempel

Men når du kalder server.accept(); for du en socket retur som kan give dig en OutputStream.
Denne stream kan du så lede til f.eks. en fil
Avatar billede ladyhawke Novice
26. marts 2001 - 13:52 #10
Tak, jeg prøver ad...
Avatar billede disky Nybegynder
26. marts 2001 - 13:55 #11
det skal lige siges jeg har ikke selv testet dette. Men ud fra Java API\'en ville jeg bestemt mene det kan lade sig gøre
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