import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; public class KlientInterface extends JFrame { private JTextField prata; private JTextArea meddelande; private JLabel status; private ReadStream in; private DataOutputStream out; private Socket ksocket; public KlientInterface(String[] args){ super("Chat-Klient"); String host = "127.0.0.1"; int port = 2000; if (args.length==1) host=args[0]; else if (args.length==2){ host=args[0]; int portnr=Integer.parseInt(args[1]); if (portnr>1023 && portnr<65536){ port=portnr; } } addWindowListener(new Exit()); addKeyListener(new EnterLyssnare()); JPanel ovre=new JPanel(new GridLayout(2,4)); ovre.add(prata=new JTextField()); getContentPane().add(ovre, BorderLayout.NORTH); meddelande=new JTextArea(); JScrollPane scroll=new JScrollPane(meddelande); getContentPane().add(scroll, BorderLayout.CENTER); status = new JLabel(); JPanel statusBar = new JPanel(); statusBar.add(status); getContentPane().add(statusBar, BorderLayout.SOUTH); setSize(500,400); show(); connect(host,port); } protected void connect(String url, int port){ setMedd(url); try{ ksocket = new Socket(url,port); out = new DataOutputStream(ksocket.getOutputStream()); in = new ReadStream(new BufferedReader(new InputStreamReader(ksocket.getInputStream())), this); in.start(); }catch(UnknownHostException uhe){ System.out.println("Host okänd!"); System.exit(0); }catch(IOException ioe){ System.out.println("Servern nere!"); System.exit(0); } setMedd(url); } protected void logg(String message){ if(!message.endsWith("\n")) message=message+"\n"; meddelande.append(message); meddelande.setCaretPosition(meddelande.getText().length()); } protected void setMedd(String mess){ status.setText("Connected to " + mess + "\n"); } protected void sendStream(String message){ try{ if(message.length()>0){ out.writeBytes(message+"\n"); } }catch(IOException ioe){ setMedd("Server did not listen to message!"); } } public class ReadStream extends Thread { private KlientInterface klient; private BufferedReader input; private String line=""; private boolean online = true; public ReadStream(BufferedReader inputStream, KlientInterface klient){ this.klient=klient; input=inputStream; } public void run(){ while(online){ try{ sleep(1000); if((line=input.readLine())!=null){ klient.logg(line+"\n"); } }catch(InterruptedException e){ }catch(IOException ioe){ klient.setMedd("not connected"); klient.setMedd("Server offline"); } } } } public class EnterLyssnare extends KeyAdapter{ public void keyPressed(KeyEvent e){ int key = e.getKeyCode(); if (key==e.VK_ENTER){ if(prata.hasFocus()){ sendStream(prata.getText().trim()); prata.setText(""); prata.requestFocus(); } } } } class Exit extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); } } public static void main(String[] args){ new KlientInterface(args); } }