Avatar billede ttn- Nybegynder
23. marts 2006 - 22:38 Der er 6 kommentarer og
1 løsning

Strømme

Hejsa

Når der nu kommer flere klienter til ens server, hvordan gør man så sådan, at den er i stand til at svare dem hver især, uden andre hører dette?

Hvordan gøres det lettest?
Avatar billede arne_v Ekspert
23. marts 2006 - 22:44 #1
du laver en while loekke hvor du accepter socket connections

saa starter du en traad for hver af dem
Avatar billede ttn- Nybegynder
23. marts 2006 - 22:45 #2
Kan du komme med et eksempel?
Avatar billede arne_v Ekspert
23. marts 2006 - 22:46 #3
hvis du regner med mere end 50 samtidige clients skal du overveje
mindre end 1 traad per client, men kode maessigt er 1 traad per client nemmest
Avatar billede arne_v Ekspert
23. marts 2006 - 22:50 #4
for halvandet aar siden lavede jeg til et andet spoergsmaal denne kode:

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

public class WebServer {
  private final static int PORT = 80;
  private final static String PATH = "C:\\";
  public static void main(String[] arg) {
      ServerSocket ss = null;
      try {
        ss = new ServerSocket(PORT);
      } catch (IOException e) {
        System.out.println("Can not bind to port " + PORT);
        System.exit(0);
      }
      while(true) {
        try {
            Socket s = ss.accept();
            InputStream is = s.getInputStream();
            OutputStream os = s.getOutputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            PrintWriter pw = new PrintWriter(os);
            String req = br.readLine();
            StringTokenizer st = new StringTokenizer(req, " ");
            String method = st.nextToken();
            String path = st.nextToken();
            String protocol = st.nextToken();
            if(path.equals("/")) {
              path = "index.htm";
            }
            System.out.println(method + " " + path);
            boolean binary;
            String type;
            if(path.indexOf(".htm") > 0) {
              binary = false;
              type = "text/html";
            } else if(path.indexOf(".txt") > 0) {
              binary = false;
              type = "text/plain";
            } else if(path.indexOf(".gif") > 0) {
              binary = true;
              type = "image/gif";
            } else if(path.indexOf(".jpg") > 0) {
              binary = true;
              type = "image/jpeg";
            } else {
              binary = true;
              type = "application/octet-stream";
            }
            pw.println("HTTP/0.9 200 OK");
            pw.println("Content-Type: " + type);
            pw.println();
            pw.flush();
            os.flush();
            if(binary) {
              sendBinary(path, os);
            } else {
              sendText(path, pw);
            }
            os.flush();
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
      }
  }
  private static void sendText(String filename, PrintWriter pw) throws IOException {
      BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(PATH + filename)));
      String line;
      while((line = br.readLine()) != null) {
        pw.println(line);
      }
      pw.flush();
  }
  private static void sendBinary(String filename, OutputStream os) throws IOException {
      InputStream is = new FileInputStream(PATH + filename);
      byte[] b = new byte[100000];
      int n;
      while((n = is.read(b)) >= 0){
        os.write(b, 0, n);
      }
  }
}
Avatar billede ttn- Nybegynder
23. marts 2006 - 23:08 #5
et svar
Avatar billede arne_v Ekspert
23. marts 2006 - 23:16 #6
kommer her
Avatar billede ttn- Nybegynder
23. marts 2006 - 23:30 #7
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