Avatar billede william_munny Nybegynder
22. september 2004 - 14:16 Der er 2 kommentarer og
1 løsning

Socket problemer

Har følgende:

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

class ClientHandler extends Thread {

  protected Socket incoming;

  public ClientHandler(Socket incoming) {
    this.incoming = incoming;
  }

  public void run() {
    try
    {
    BufferedReader in = new BufferedReader(new  InputStreamReader(incoming.getInputStream()));
    PrintWriter out = new PrintWriter(new OutputStreamWriter(incoming.getOutputStream()));
    out.println("Hello! This is The Munny Server");
    out.println("COMMANDS BYE , GETDIR");
    out.flush();
    out.close();

    for (;;)
    {
        String str = in.readLine();
           
        if (str == null)
        {
            break;
        }
        else
        {
            out.flush();
        System.out.println("Received: " + str);
   
        if (str.trim().equals("BYE"))
            break;
        if (str.trim().equals("GETDIR"))
        {
        out.println("Echo: " + str);
        out.println("C:\\film3.AVI");
        out.println("C:\\film2.AVI");
        out.println("C:\\film.AVI");
        out.println("C:\\test.RAR");
        out.flush();

        }
               
        }
           
        }
       
        System.out.println("Connection closed");
        incoming.close();
    }
    catch (Exception e)
    {
        System.out.println("Error: " + e);
    }
  }

}

public class MultiEchoServer {
    public static void main(String[] args)
    {
    System.out.println("MultiEchoServer started.");
       
    try
    {
        ServerSocket s = new ServerSocket(8009);
           
    for (;;)
    {
        Socket incoming = s.accept();
        System.out.println("Connection Accepted");
        new ClientHandler(incoming).start();
    }
    }
    catch (Exception e)
    {
        System.out.println("Error: " + e);
    }
       
    System.out.println("MultiEchoServer stopped.");
    }
}

OG

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

public class Client
{
   
    BufferedReader in;
    BufferedReader ink;
    PrintWriter out;
    String input;
    Socket t;
    String str;
   
    public void process() throws IOException
    {

        while((str =in.readLine())!= null)
        {
            System.out.println(str);
        }
       
        System.out.println("Processed");

    }   
   
    public void connect(String hostname) throws IOException
    {
   
        t = new Socket(hostname, 8009);
       
        in = new BufferedReader(new InputStreamReader(t.getInputStream()));
        out = new PrintWriter(new OutputStreamWriter(t.getOutputStream()));
        ink = new BufferedReader(new InputStreamReader(System.in));
       
        process();
       
        System.out.print("> prompt ");
       
        while ((input=ink.readLine()) != null)
        {
            out.println(input);
            out.flush();
            process();
               
            if(input.equalsIgnoreCase("BYE"))
                break;
               
            System.out.print("> prompt ");   
        }
     
       
    }
   
}

OG

class EchoClient {
   

  public static void main(String[] args)
  {
      Client c = new Client();
     
      c.connect("localhost");

  }

}

Men jeg kan ikke få det til at spille..
Min klient skriver velkomstbeskeden ud men det er så også det, den forsætter ikke efter at input er skrevet færdig.

Hvis jeg vælger et lukke "out.close();" efter min velkomst besked på serversiden er skrevet ud så forsætter den ?? er der noget galt med mit loop i process() metoden eller er det forbindelsen det er galt med ?? lader til at den står og venter på mere input men burde out.flush(); ikke sørge for at in.readLine() ville blive null ??

Eller har jeg lavet en bommert et sted ??
Avatar billede arne_v Ekspert
22. september 2004 - 16:42 #1
readLine på sockets er blocking d.v.s. at den venter på at der kommer nogle
data at læse.

Lad din server sende BYE eller ande anden kommando til client for at markere
at nu komme rder ikke mere.
Avatar billede william_munny Nybegynder
22. september 2004 - 18:36 #2
Tydeligvis :-)

Smid et svar
Avatar billede arne_v Ekspert
22. september 2004 - 18:38 #3
svar
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