Przesyłanie danych z serwera do klienta

0

Hi, napisałem w Javie prosty serwer i klienta. Chciałbym abym z serwera mógł przesyłać dane do klienta dopóki nie wprowadzę litery "q". Problem w tym, że w kodzie serwera nie działa wczytywanie teksu, który chcę przesłać do klienta.

serwer:

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

class MainServer {

    public MainServer() {
        try {
            try {
                sock = new ServerSocket(14500);
            } catch (IOException e) {
                System.out.println("Nie powiodlo utworzenie gniazda");
            }
                try {
                    conn = sock.accept();
                } catch (IOException e) {
                    System.out.println("Nie mona nawiazac polaczenia");
                }
             System.out.println("24");
                out = conn.getOutputStream();
                if (out != null) {
                    save = new PrintWriter(out);
                    
                }
                if (save != null) {
                    java.util.Scanner sc = new java.util.Scanner(System.in);
                    while(true) {
                        String s = sc.next();
                        if (!s.equals("q"))
                            save.print(s);
                        else
                            break;
                    }
                }
                save.close();
                out.close();
                try {
                    sock.close();
                } catch (IOException e) {
                }     
            
        } catch (IOException ex) {
              
        }
    }
    private ServerSocket sock;
    private Socket conn = null;
    private OutputStream out;
    private PrintWriter save;
}

public class Server {

    public static void main(String[] args) {
        MainServer s = new MainServer();
    }
}

Nie dostałem żadnych błędów, serwer i klient uruchamiają się bez błędów. Niestety serwer nie robi tego co bym chciał.

klient:

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


class ClientServer {
    public ClientServer() {
        try {
            try {
                try {
                    soc = new Socket("localhost", 14500);
                } catch (UnknownHostException ex) {
                } catch (IOException ex) {
                }
                try {
                    in = null;
                    in = soc.getInputStream();
                } catch (IOException ex) {
                }
                if (in != null) {
                    while(true) {
                        if (msg != null)
                            System.out.println(msg);
                        else continue;
                    }
                }
                scanner.close();
                in.close();
            } catch (IOException ex) {
            }
            soc.close();
        } catch (IOException ex) {}
    }
    private Socket soc;
    private InputStream in;
    private BufferedReader scanner;
    private String msg;
}
public class Main {
    public static void main(String[] args) {
        ClientServer cs = new ClientServer();
    }

}

Będę wdzięczny za pomoc.

0

Proszę o pomoc.

0

Jaja sobie robisz?

                try {
                    in = null;
                    in = soc.getInputStream();
                } catch (IOException ex) {
                }
                if (in != null) {
                    while (true) {
                        if (msg != null)
                            System.out.println(msg);
                        else
                            continue;
                    }
                }

Pokaż mi gdzie tutaj COKOLWIEK wczytujesz z tego InputStream in. Bo ja widze że NIGDY z niego nie czytasz...

0

Spokojnie Shalom, czyta z konsoli.

                if (save != null) {
                    java.util.Scanner sc = new java.util.Scanner(System.in);
                    while(true) {
                        String s = sc.next();
                        if (!s.equals("q"))
                            save.print(s);
                        else
                            break;
                    }
                }

Imho, czytanie z konsoli i współpraca z klientami muszą się odbywać w osobnych wątkach.

0

Hi, dziękuję Bo za pomoc.

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

class MainServer {

    public MainServer() {
        try {
            try {
                sock = new ServerSocket(14500);
            } catch (IOException e) {
                System.out.println("Nie powiodlo utworzenie gniazda");
            }
                try {
                    conn = sock.accept();
                } catch (IOException e) {
                    System.out.println("Nie mona nawiazac polaczenia");
                }
            
                out = conn.getOutputStream();
                if (out != null) {
                    save = new PrintWriter(out);
                }

                if (save != null) {
                       read.start();
                }
                
                save.close();
                out.close();
                
                try {
                    sock.close();
                } catch (IOException e) {
                }

        } catch (IOException ex) {
        }
    }
    private class TRead extends Thread {
        public void run() {
             java.util.Scanner sc = new java.util.Scanner(System.in);
                    while(true) {
                        String s = sc.next();
                        if (!s.equals("q"))
                            save.print(s);
                        else
                            break;
                    }
        }
    }

    private TRead read = new TRead();
    private ServerSocket sock;
    private Socket conn = null;
    private OutputStream out;
    private PrintWriter save;
}

public class Main {

    public static void main(String[] args) {
        MainServer s = new MainServer();
    }
}

Takie coś masz na myśli?

1 użytkowników online, w tym zalogowanych: 0, gości: 1