import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class mchat extends Frame { String instring, outstring, laststring; static final int gport = 1918; Socket csocket; // connection socket to server (other guy) ServerSocket ssocket; // listening, passive socket InetAddress me, you; InputStreamReader isr; OutputStreamWriter osw; BufferedReader br; PrintWriter pw; DataOutputStream dos; DataInputStream dis; Button sbutton = new Button(" Connect"); Button cbutton = new Button("clear"); TextField mytext, yourtext, iptext; Label prompt; boolean beserver = false; receiver rthread; sender sthread; int lastindex = 0; // index of last new char read public void init() { int i; sbutton.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { try { you = InetAddress.getByName(iptext.getText()); me = InetAddress.getLocalHost(); connect(); } catch (Exception E) { System.out.println(E.toString()); iptext.setText(""); } } } ); cbutton.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { mytext.setText(""); } } ); mytext = new TextField(60); yourtext = new TextField(60); iptext = new TextField(30); add(new Label("Peer Address: ")); add(iptext); add(sbutton); // "connect" button add(mytext); add(cbutton); add(yourtext); rthread = new receiver(this); sthread = new sender(this); } // inita public void connect() { try { ssocket = new ServerSocket(gport); // uses same port ssocket.setSoTimeout(300000); // 5 minute timeout on blocks try { csocket = new Socket(you,gport); } // try to be client first catch (Exception E) { beserver = true; } if (beserver) { System.out.println("waiting for connection ..."); csocket = ssocket.accept(); // wait for client } System.out.println("Connected to " + csocket.getInetAddress()); // System.out.println(""); dos = new DataOutputStream(csocket.getOutputStream()); dis = new DataInputStream(csocket.getInputStream()); // set up IO objects br and pw isr = new InputStreamReader(csocket.getInputStream()); br = new BufferedReader(isr); osw = new OutputStreamWriter(csocket.getOutputStream()); pw = new PrintWriter(osw,true); // true for autoflush outstring = ""; instring = ""; laststring = ""; rthread.start(); // start threads sthread.start(); } catch (Exception E) { System.err.println(E.toString()); } } // connect public static void main(String[] args) // needed for application { mchat session = new mchat(); session.setLayout(new FlowLayout(FlowLayout.CENTER)); session.resize(500,350); session.init(); session.show(); //session.start(); } // end main } // end mchat class class receiver extends Thread { mchat chat; receiver(mchat j) { super(); chat = j; } public void run() { int i = 0; try { while (!(chat.outstring.equals("sign off"))) { chat.instring = chat.br.readLine(); // update? chat.yourtext.setText(chat.instring); // Thread.sleep(10); // slight delay } chat.hide(); chat.dispose(); } catch (Exception E) {System.out.println(E);} } // run } // end receiver class sender extends Thread { mchat chat; sender(mchat j) // constructor { super(); chat = j; } public void run() { int i = 0; try { while (!(chat.outstring.equals("sign off"))) { chat.outstring = chat.mytext.getText(); if (!(chat.outstring.equals(chat.laststring))) { chat.laststring = new String(chat.outstring); // copy chat.pw.println(chat.outstring); // send } // if Thread.sleep(20); // slight delay } chat.hide(); chat.dispose(); } catch (Exception E) {System.out.println(E);} } // run } // end sender