Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GUI чат, tcp/ip 
V
    Опции темы
Samotnik
Дата 25.4.2008, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: нет
Всего: 191



САБЖ! 
может у кого есть готовый чат  (по TCP/IP) GUIшный..
т.е. обычный чатик текстарея и кнопочка сенд на клиенте и сервере...
Либо ссылочки у кого есть полезные ?


Это сообщение отредактировал(а) Samotnik - 25.4.2008, 01:05
PM MAIL   Вверх
Markoff
Дата 28.7.2008, 00:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 27.7.2008

Репутация: нет
Всего: нет




Вот код сервера
Код

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



public class SocketTestServer 
{
    public static Object lock = new Object();
    public static Hashtable<String,Socket> Client = new Hashtable<String,Socket>();
    private static class MyThread implements Runnable
    {
        private Socket socket;
        private String nameCl;
        
        public MyThread(Socket socket)
        {
            this.socket = socket;
            getNameClient();
        }
        
        public boolean getNameClient()
        {
            InputStream is;
                    
            OutputStream os;
            try 
            {
                is = socket.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                
                os = socket.getOutputStream();
                PrintStream ps = new PrintStream(os);
                ps.println("Введите свой логин:");
                nameCl = br.readLine();
                while(Client.containsKey(nameCl))
                {
                    ps.println("Введите новый логин так, как " + nameCl + " уже существует:");
                    nameCl = br.readLine();
                    
                    if(nameCl == null)
                        continue;
                    
                    
                    System.out.print(nameCl);
                }
                
                if(nameCl != null)
                {
                    ps.println("Ok");
                    Client.put(nameCl,socket);
                    return true;
                }
                                    
            } 
            catch (IOException e)    
            {
                e.printStackTrace();
            }
            
            return false;
        }
        
        public static void outAllClient(String message)
        {
            Socket sockOutClient;
            
            for(Enumeration enumClient = Client.elements();enumClient.hasMoreElements(); )
            {
                
                sockOutClient = (Socket)enumClient.nextElement();
                OutputStream os;
                try 
                {
                    os = sockOutClient.getOutputStream();
                    PrintStream ps = new PrintStream(os);
                    ps.println(message);
                                        
                } 
                catch (IOException e)    
                {
                    e.printStackTrace();
                }
            }                                    
        }
        
        public void run() 
        {
            InputStream is;
    
            try 
            {
                String s;
                for(;true;)
                {
                    is = socket.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));
                    s = br.readLine();
                    
                    if(s == null)
                        break;
                    
                    outAllClient(s);
                }
            } 
            catch (IOException e) 
            {
                Client.remove(nameCl);
                System.out.println("Disconnect " + nameCl);
            }    
        
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    

    public static void main(String[] args)
    {
        ServerSocket ss;
        try 
        {
            ss = new ServerSocket(9876);
            System.out.println("Server started!");
            Socket socket;
            while(true)
            {
                socket = ss.accept();
                Thread t = new Thread(new MyThread(socket));
                t.start();
                System.out.println("New connection!");
            }    
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
        MyThread.outAllClient("Server disconnect");
    }
}




а вот клиент
Код

import java.net.*;
import java.text.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.awt.*;
import java.io.*;
import java.awt.event.*;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;






public class SocketTestClient 
{
    public static Object lock = new Object();
    public static Thread t;
    public static boolean exit = false;
    public static String nameClient = null;
    public static int numberMsg = 4;
    public static PrintStream ps = null;
    public static ArrayList<ParMessage> data = new ArrayList<ParMessage>();

    public JMyFrame frame = new JMyFrame();
    
    private class MyThread implements Runnable
    {
        private Socket socket;
        
        
        public MyThread(Socket socket)
        {
            this.socket = socket;
        }

        public void parMsg(String s)
        {
            String[] strMsg = new String[3];
            int n = 0, n1 = 0;
            for(int i = 0;i < 3; i++)
            {
                n = s.indexOf(' ', n1);
                if(i == 2)
                    n = s.length();
                
                strMsg[i] = s.substring(n1,n);
                n1 = n+1;
            }
            ParMessage par = new ParMessage(strMsg[0], strMsg[1], strMsg[2]);
            data.add(par); 
        }
        
        public void run() 
        {
            InputStream is;
            try 
            {
                String s = null;
                is = socket.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                
                while(!exit)
                {                    
                    s = br.readLine();
                    parMsg(s);
                    frame.refreshTable();
                }
            } 
            catch (IOException e) 
            {
                    e.printStackTrace();
            }
                        
        }
    }
    
    public static boolean getNameClient(Socket socket)
    {
        InputStream is;
        String s = null;
        String nameC = null;
        
        OutputStream os;
        try 
        {
            is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            BufferedReader br1= new BufferedReader( new InputStreamReader(System.in));
            
            os = socket.getOutputStream();
            PrintStream ps = new PrintStream(os);
            
            while(true)
            {
                s = br.readLine();
                
                if(s.equalsIgnoreCase("Ok") || s == null)
                    break;
                
                nameC = JOptionPane.showInputDialog(s + ":");
                ps.println(nameC);
            }
            
            if(nameC != null)
                nameClient = nameC;
                                
        } 
        catch (IOException e)    
        {
            e.printStackTrace();
        }
        
        return false;
    }
    
    public static class JMyFrame extends JFrame
    {
        private JTable table;
        private MyModel model; 
        
        public void refreshTable()
        {
            table.tableChanged(new TableModelEvent(model));
        }
                
        public class MyCellRenderer implements TableCellRenderer
        {
            public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean isSelected, boolean isFocused, int r, int c) 
            {
                JLabel label = new JLabel(arg1.toString());
                label.setOpaque(true);
                if (isSelected)
                    label.setBackground(Color.cyan);
                if (isFocused)
                    label.setForeground(Color.red);
                label.setHorizontalAlignment(JLabel.CENTER);
                return label;
            }
        }
        
        public class MyModel extends AbstractTableModel
        {            
            public int getColumnCount() {            
                return 3;
            }

            public int getRowCount() {
                return data.size();
            }

            public Object getValueAt(int r, int c) {
                if( c == 0)
                    return data.get(r).login;
                else if( c == 1)
                    return data.get(r).time;
                else if( c == 2)
                    return data.get(r).msg;
                return "";
            }
            
            public Class getColumnClass(int c) {
                return String.class;
            }
            public String getColumnName(int c)
            {
             if( c == 0)
                    return "Login";
                else if( c == 1)
                    return "Time";
                else if( c == 2)
                    return "Message";
                return "";
            }
        }
        
        public JMyFrame()
        {            
            this.setTitle("ChatClient");
            this.setLocationRelativeTo(null);
                    
            this.addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent e) { System.exit(0); }
            });
            GridBagLayout gridbag = new GridBagLayout();
            GridBagConstraints c = new GridBagConstraints();

           
            this.setLayout(gridbag);
            
            final JTextField tf = new JTextField();
            tf.setPreferredSize(new Dimension(100, 20));
            
            
            JButton btn = new JButton("Send");
            btn.addActionListener(new ActionListener()
            {
                
                public void actionPerformed(ActionEvent e) {
                    Date date = new Date();
                    SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
                    ps.println(nameClient + " " + dateFormat.format(date) + " " + tf.getText());                
                }
            });
            c.insets = new Insets(10,10,10,10);
            table = new JTable();
            
            
            model = new MyModel();
            table.setModel(model);
            table.setDefaultRenderer(String.class, new MyCellRenderer());
            table.setPreferredScrollableViewportSize(new Dimension(500, 70));
           
            //Create the scroll pane and add the table to it.
            
            c.gridwidth = 2;
            c.gridheight = 2;
            c.weighty = 1.0;
            c.fill = GridBagConstraints.BOTH;
            c.gridwidth = GridBagConstraints.REMAINDER; //end row
            c.weightx = 1.0;

            table.setPreferredScrollableViewportSize(new Dimension(10,10));
            JScrollPane scrollPane = new JScrollPane(table); 
            gridbag.setConstraints(scrollPane,c);
        
            this.add(scrollPane);
            c.weighty = 0.0;
            c.weightx = 1.0;  
            c.gridwidth = GridBagConstraints.RELATIVE; //end row
            gridbag.setConstraints(tf,c);
            this.add(tf);
            c.weightx = 0.0;   
            c.insets = new Insets(10,10,10,10);
            c.gridwidth = GridBagConstraints.REMAINDER; //end row
            gridbag.setConstraints(btn,c);
        
            this.add(btn,c);
            this.pack();
            
            this.setVisible(true);
        }
        
    }

    public static class ParMessage
    {
        public String login;
        public String time;
        public String msg;
        
        public ParMessage(String _login, String _time, String _msg)
        {
            login = _login;
            time = _time;
            msg = _msg;
        }
    }
    
    public SocketTestClient()
    {
        Socket socket = null;
    
        try {
            socket = new Socket("127.0.0.1", 9876);
            getNameClient(socket);
            t = new Thread(new MyThread(socket));
            OutputStream os = socket.getOutputStream();
            ps = new PrintStream(os);
            t.start();
        
                
            
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        try {
            t.join();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        catch (InterruptedException e1) {
            e1.printStackTrace();
        }        
    }
    
    public static void main(String[] args)
    {
        new SocketTestClient();
    }
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0625 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.