Avatar billede mik28 Seniormester
22. oktober 2004 - 10:19 Der er 9 kommentarer og
1 løsning

Chat program (client/server)

Jeg her problemer med at få det til at spille. Min client ser således ud

import java.io.*;
import java.net.*;
   
    class Scclient {
    public static void main(String argv[]) throws Exception
    {
      String sentence = " ";
           
      BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
      Socket clientSocket = new Socket("192.168.122.171", 6789);
     
      DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
      // BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
     
          while(sentence!="q")
          {
          sentence = inFromUser.readLine();
          outToServer.writeBytes(sentence);
          }
    clientSocket.close();
    }
    }
Avatar billede mik28 Seniormester
22. oktober 2004 - 10:23 #1
serveren ser således ud

import java.io.*;
import java.net.*;
   
    class Schat {
      public static void main(String argv[]) throws Exception
          {
            String clientSentence=" ";
            int t=0;
            ServerSocket welcomeSocket = new ServerSocket(6789);

            while(true) {
                t++;
                System.out.println("T er lig:"+t);
                Socket connectionSocket = welcomeSocket.accept();
                BufferedReader inFromClient =
                  new BufferedReader(new InputStreamReader(
                      connectionSocket.getInputStream())); //secure
                     
                while(clientSentence != null) {

                    clientSentence = inFromClient.readLine();
                      // outToClient.writeBytes(clientSentence);
                    System.out.println(clientSentence);
                }
            }
          }
    }
Avatar billede mik28 Seniormester
22. oktober 2004 - 10:25 #2
I første opgang er det bare meningen at man skal kunne sende en besked den ene vej
Avatar billede arne_v Ekspert
22. oktober 2004 - 11:07 #3
Prøv og erstat din DataOutputStream med en PrintWriter.

Og kald .flush() straks efter at du har skrevet
Avatar billede mik28 Seniormester
22. oktober 2004 - 11:50 #4
Okay. Jeg har en ide om at jeg gerne vil have to tråde til at køre. En til at sende og en til at modtage, men jeg kan ikke helt se hvordan man skal gribe det an. Det er sikkert her i skoven

Thread send    = new Thread();
      Thread modtag  = new Thread();
     
          while(sentence!="")
          {
          sentence = inFromUser.readLine();
                   
              try{
                 
                  outToServer.writeBytes(sentence+'\n');
                 
              }catch (InterruptedException e){}
         
         
          }
Avatar billede arne_v Ekspert
22. oktober 2004 - 11:53 #5
Normalt har du kun behov for en ekstra tråd.
Avatar billede arne_v Ekspert
22. oktober 2004 - 11:54 #6
Var det ikke dig jeg lavede det her eksempel til:

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

public class User1 {
  public static void main(String[] args) throws Exception {
      ServerSocket ss = new ServerSocket(4001);
      Socket s = ss.accept();
      T1 t = new T1(s);
      t.start();
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      PrintWriter pw = new PrintWriter(s.getOutputStream());
      String line;
      while((line = br.readLine()) != null) {
        pw.println(line);
        pw.flush();
      }
  }
}

class T1 extends Thread {
  private BufferedReader br;
  public T1(Socket s) throws Exception {
      br = new BufferedReader(new InputStreamReader(s.getInputStream()));
  }
  public void run() {
      try {
        String line;
        while((line = br.readLine()) != null) {
            System.out.println(line);
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
  }
}


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

public class User2 {
  public static void main(String[] args) throws Exception {
      Socket s = new Socket("localhost", 4001);
      T2 t = new T2(s);
      t.start();
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      PrintWriter pw = new PrintWriter(s.getOutputStream());
      String line;
      while((line = br.readLine()) != null) {
        pw.println(line);
        pw.flush();
      }
  }
}

class T2 extends Thread {
  private BufferedReader br;
  public T2(Socket s) throws Exception {
      br = new BufferedReader(new InputStreamReader(s.getInputStream()));
  }
  public void run() {
      try {
        String line;
        while((line = br.readLine()) != null) {
            System.out.println(line);
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
  }
}
Avatar billede mik28 Seniormester
22. oktober 2004 - 11:56 #7
Nope :-)
Avatar billede arne_v Ekspert
22. oktober 2004 - 11:58 #8
Jeg lavede det eksempel for ret nylig til et spørgsmål her på Eksperten.

Hvis du kigger så vil du se at de ligger ret tit på din problem stilling.
Avatar billede mik28 Seniormester
22. oktober 2004 - 12:38 #9
Du er for sej. Tak for hjælpen ;-)
Avatar billede arne_v Ekspert
06. november 2004 - 17:54 #10
jeg ligger et svar så
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