Avatar billede lakana Nybegynder
05. august 2006 - 17:43 Der er 3 kommentarer og
1 løsning

er denne multi threaded?

hey.. er denne 'server' multithreaded? Hvis ja, okay. Hvis nej - hvordan får jeg den så til multithreaded?

import java.net.ServerSocket;
import java.net.Socket;
import java.net.InetAddress;
import java.net.BindException;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

class EchoServer {

    public static void main(String[] args) {
    final int port = 9999; //porten vi vil lytte på.

    System.out.println("[server] Starter echo server på port "+port);

    ServerSocket srv = null;
    try {
        srv = new ServerSocket(port);
    } catch (BindException be) {
        be.printStackTrace();
        System.exit(1);
    } catch (IOException e) {
        e.printStackTrace();
        System.exit(1);
    }
    Socket sock = null;
    try {
        while ((sock = srv.accept()) != null) {
        InetAddress remoteHost = sock.getInetAddress();
        int remotePort = sock.getPort();
        System.out.println("[server] Accepterede forbindelse fra "+
                  remoteHost.getHostAddress()+
                  ":"+remotePort);

        InputStream in = sock.getInputStream(); //Stream til indkommende data
        OutputStream out = sock.getOutputStream(); //Stream til udgående data


        byte[] buffer = new byte[16384]; //16kb buffer
        while (true) {
            /* InputStream's read(byte[], int, int) metode returnerer enten:
              Antallet af læste tegn
              -1, hvis der ikke kunne læses data (Hvis slutningen af streamen er nået).
            */
            int read = in.read(buffer, 0, buffer.length); //læs op til MAX_SIZE tegn.

            if (read == -1)
            break; //echo ikke hvis der ikke kunne læses data

            out.write(buffer, 0, read); //skriv tegn tilbage til klienten
        }
        System.out.println("[server] Forbindelse afbrudt..");
        }
    } catch (IOException e) {
        System.out.println("[server] Fejl: Input/Output fejl");
        e.printStackTrace();
        System.exit(1);
    }
    }
}
Avatar billede lakana Nybegynder
05. august 2006 - 19:11 #1
Ups.. mente hvordan får jeg den multi threaded :) sorry
Avatar billede esbenp Nybegynder
05. august 2006 - 20:29 #2
Her er et skelet til en multi trådet server


public class Server extends Thread{
  private Socket socket;

  public Server(Socket socket) throws IOException {
    this.socket = socket;
  }

  public void run() {
    //Sæt din kode her. Brug socket variablen
  }
  public static void main(String[] args) throws Exception {
    while (true)
      new Server(server.accept()).start();
  }
}
Avatar billede lakana Nybegynder
05. august 2006 - 21:27 #3
Sådan!

Men hvordan får jeg den til at sende klientens kommandoer tilbage igen?

fx
Klient siger hej til server
server sender "hej" tilbage til klienten
Klient håndterer "hej" ect... ?????

I følgende kode!:

import java.net.ServerSocket;
import java.net.Socket;
import java.net.InetAddress;
import java.net.BindException;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

class Server {

    public static void main(String[] args) {
    final int port = 9999; //porten vi vil lytte på.

    System.out.println("[server] Starter echo server på port "+port);

    ServerSocket srv = null;
    try {
        srv = new ServerSocket(port);
    } catch (BindException be) {
        System.out.println("[server] Kunne ikke lytte på "+port);
        System.exit(1);
    } catch (IOException e) {
        System.out.println("[server] Kunne ikke åbne server-socket");
        e.printStackTrace();
        System.exit(1);
    }

    Socket sock = null;
    try {
        while ((sock = srv.accept()) != null) {
        InetAddress remoteHost = sock.getInetAddress();
        int remotePort = sock.getPort();
        System.out.println("[server] Accepterede forbindelse fra "+
                  remoteHost.getHostAddress()+
                  ":"+remotePort);

        new Thread(new EchoThread(sock)).start();
        }
    } catch (IOException e) {
        System.out.println("[server] Fejl: Input/Output fejl");
        e.printStackTrace();
        System.exit(1);
    }
    }
}
Avatar billede lakana Nybegynder
05. august 2006 - 22:56 #4
Har fndet ud af det. + det andet jeg har spurgt om tideligere.. skulle bare sendde + "\0" bagefter.. altså et null char
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