Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

chat
Список форумов
 ->  Сети


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
Andrey Parhomenko : 99
Новичок
Откуда: Ukraine.Sumy

СообщениеОкт 01, 2008 23:39 
Ответить с цитатой
Пишу что-то типа чата со сервером(что-то типа irc)
Сервер
Код:

import java.io.*;

import java.lang.ClassNotFoundException;

import java.lang.Runnable;

import java.lang.Thread;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Scanner;

 

public class Server {

    private ServerSocket server;

    private int port = 7777;

 

    public Server() {

        try {

            server = new ServerSocket(port);

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    public static void main(String[] args) {

        Server example = new Server();

        example.handleConnection();

    }

 

    public void handleConnection() {

        System.out.println("Waiting for client message...");

 

        //

        // The server do a loop here to accept all connection initiated by the

        // client application.

        //

        while (true) {

            try {

                Socket socket = server.accept();

                new ConnectionHandler(socket);

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

}

 

class ConnectionHandler implements Runnable {

    private Socket socket;

 

    public ConnectionHandler(Socket socket) {

        this.socket = socket;

 

        Thread t = new Thread(this);

        t.start();

    }

 

    public void run() {

        try

        {

           System.out.println("user " + "connected");

           

            DataInputStream ois = new DataInputStream(socket.getInputStream());

            Scanner in = new Scanner(ois);

            while(in.hasNextLine()){

               System.out.println(in.nextLine());

            }

      

            ois.close();





        } catch (IOException e) {

            e.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}


Клиент
Код:
import java.io.*;

import java.lang.ClassNotFoundException;

import java.net.InetAddress;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Scanner;

 

public class Client {

   public static void sendMess(PrintWriter icc, Socket socket, String mess){

   try{

      icc.write(mess);

   }catch (Exception e){e.printStackTrace();

   }

   }

    public static void main(String[] args) {

        try {

            //

            // Create a connection to the server socket on the server application

            //

            InetAddress host = InetAddress.getLocalHost();

            Socket socket = new Socket(host.getHostName(), 7777);

 

            //

            // Send a message to the client application

            //

           

       

           

            BufferedReader userText = new BufferedReader(new InputStreamReader(System.in));

           

               // write

               PrintWriter oos = new PrintWriter(socket.getOutputStream());

               sendMess(oos, socket, "text");

   

           oos.close();

        } catch (UnknownHostException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

При запуске Client? происходит отправка сообщения и сокет почему-то закрывается,
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Староверъ : 7381
Ктапубеп
Откуда: Elfland

СообщениеОкт 02, 2008 6:39 
Ответить с цитатой
Ну логично, программа-клиент просто завершается. А что должно быть?
зы: в Примерах есть что-то про на эту тему.
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andrey Parhomenko : 99
Новичок
Откуда: Ukraine.Sumy

СообщениеОкт 02, 2008 15:02 
Ответить с цитатой
Нужно, чтобы клиент постоянно считывал инфу с сервера.
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Староверъ : 7381
Ктапубеп
Откуда: Elfland

СообщениеОкт 02, 2008 15:49 
Ответить с цитатой
Клиент посылает информацию, а сервер сидит и слушает порт, когда туда что-то приходит, то он принимает информацию.
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andrey Parhomenko : 99
Новичок
Откуда: Ukraine.Sumy

СообщениеОкт 02, 2008 16:15 
Ответить с цитатой
А можно сделать, чтобы все, что приходило на саервер, приходило и клиенту, например как в Mirc?
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
kez : 982
JavaTalks Chess Master 2008
Откуда: Санкт-Петербург

СообщениеОкт 02, 2008 16:21 
Ответить с цитатой
есть написанный на java чат
Jabber Server
Jabber Client
представлены и исходники.
_________________
Je pense, donc je suis
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Andrey Parhomenko : 99
Новичок
Откуда: Ukraine.Sumy

СообщениеОкт 02, 2008 16:27 
Ответить с цитатой
За исходники спасибо, но хотелось бы самому разобраться на простеньком примере, а не на большом проекте Smile
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
шкипер : 1960
Java Developer
Откуда: Харьков

СообщениеОкт 02, 2008 16:36 
Ответить с цитатой
Andrey Parhomenko писал(а):
За исходники спасибо, но хотелось бы самому разобраться на простеньком примере, а не на большом проекте Smile

Но согласитесь, легче прочесть в книжке, как организуются циклы, чем ждать объяснения этого на форуме.... Laughing
_________________

aka ur6lad
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Andrey Parhomenko : 99
Новичок
Откуда: Ukraine.Sumy

СообщениеОкт 03, 2008 22:04 
Ответить с цитатой
Как сделать, чтобы весь текст, который пишется на сервер сразу передавал его всем подключённым клиентам?
Приложение переписано:
Client
Код:
import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintStream;

import java.net.InetAddress;

import java.net.Socket;



public class Client {

public static String server = "localhost";

public static int port = 7777;

public static String nick;



   public static void printToChat(String s, PrintStream ou) throws NullPointerException, IOException{

      ou.println(s);

   }

    public static void main(String[] args) throws IOException{

       

       User.setNick("sdsd");

       nick = User.getNick();

      

      InetAddress address = InetAddress.getByName(server);

      System.out.println("connecting to: "+address);

      Socket socket = new Socket(address, port);

      System.out.println("connected to "+socket.getInetAddress().getHostName()+" to port "+socket.getPort());

      /*  ++++++++++  */

      

       BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

       PrintStream out = new PrintStream(socket.getOutputStream(), true);

        

        String fromUser, fromServer;

 

        

        

        String str;

        while ((str = in.readLine()) != null) {

        

         out.println("/nick kk");

         out.println("/connect");

         out.println("/users");

         out.println("message");      

        System.out.println("" + str);   

       }

               

               

       in.close();

       out.close();

           

      

    }

}


Server

Код:

import java.io.*;

import java.lang.ClassNotFoundException;

import java.lang.Runnable;

import java.lang.Thread;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Vector;



class ServerInfo{

   public static Vector<String> users;

   public static int usercount = 2;

   

   public static void setUserCount(int c){

      usercount = c;

   }

   public static int getUserCount(){

      return usercount;

   }

}

public class Server {

    private ServerSocket server;

    private int port = 7777;

 

    public Server() {

        try {

            server = new ServerSocket(port);

            System.out.println(server.toString());

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    public static void main(String[] args) {

        Server example = new Server();

        example.handleConnection();

    }

 

    public void handleConnection() {

        System.out.println("Server started");

 

        while (true) {

            try {

                Socket socket = server.accept();

                new ConnectionHandler(socket);

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

}

 

class ConnectionHandler implements Runnable {

    private Socket socket;

 

    public ConnectionHandler(Socket socket) {

        this.socket = socket;

 

        Thread t = new Thread(this);

        t.start();

    }

 

    public void run() {

        String nick = "Guest";

        try

        {



            BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            PrintStream out = new PrintStream(socket.getOutputStream());

            String str;

            



            while ((str = rd.readLine()) != null) {

               System.out.println("" + str);

               if ((str.length() >=5) && (str.substring(0,5).equals("/nick"))){

                  nick = str.substring(6);

               } else

               if (str.equals("/users")){

                  out.println("" + ServerInfo.usercount);

               } else

               if (str.equals("/connect")) {

                  out.println("User " + nick + " connected");

               } else{

                  out.println(nick+ " [-->]" + str);

               }

            }

            rd.close();

            out.close();



        } catch (IOException e) {

            e.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        } finally{

         try

                {

                    socket.close();

                }

                catch (IOException e)

                {    }

      }

    }

}

К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Ckpumo : 21
Новичок

СообщениеМар 09, 2010 13:33 
Ответить с цитатой
Код:
C:\Documents and Settings\Manhunt\Мои документы\Client.java:39: cannot find symbol
symbol  : variable User
location: class Client
           User.setNick("23");
           ^
C:\Documents and Settings\Manhunt\Мои документы\Client.java:41: cannot find symbol
symbol  : variable User
location: class Client
           nick = User.getNick();
                  ^
2 errors

что за ошибка скажите плиз?
К началу Посмотреть профиль Отправить личное сообщение
alon4ik : 923
free butterfly
Откуда: Харьков

СообщениеМар 09, 2010 15:20 
Ответить с цитатой
компилятор не телепат и не знает, что такое User. Что это такое вообще за переменная или класс, где объявлена?
_________________
ЯроллеR
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Ckpumo : 21
Новичок

СообщениеМар 09, 2010 15:26 
Ответить с цитатой
скомпилировал вышеописанный код
а как еще сделать так чтобы можно было указывать свой ник и адрес и порт сервера?
К началу Посмотреть профиль Отправить личное сообщение
alon4ik : 923
free butterfly
Откуда: Харьков

СообщениеМар 09, 2010 16:10 
Ответить с цитатой
Ckpumo писал(а):
скомпилировал вышеописанный код
а как еще сделать так чтобы можно было указывать свой ник и адрес и порт сервера?

А в чем проблема?
предлагаете пользователю ввести эти данные (если консольное приложение - то с консоли, если десктопное - то в какие-то поля на форме), загоняете в переменные эти значения ну и передаете их в качестве параметров соединения.
_________________
ЯроллеR
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Ckpumo : 21
Новичок

СообщениеМар 10, 2010 20:35 
Ответить с цитатой
ммм хорошо, а как сделать чтобы не дублировалось мое сообщение, т.е. не возвращалось мне то что я написал серверу
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Сети


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru