chatpeer1.java

Document last modified: 

When contacted by a new chatter add the chatter to chat list. Send own chat to all chatters in list.
 

import java.net.*;
import java.io.*;
 import java.util.Vector;
public class chatpeer1 {

 public static void main(String args[]) throws Exception {
   
  DatagramSocket      ioSocket;
  String                      toName         = "localhost";
  String                      userIn;
  byte                        sendBuffer[]  = new byte[128];
  DatagramPacket      sendPacket   = new DatagramPacket(sendBuffer, 128);
  BufferedReader        in                  = new BufferedReader(
                                                               new InputStreamReader(System.in));
  Vector              chatlist     = new Vector();
    int ioPort           = 111, receiverPort = ioPort;

  if (args.length > 0) toName = args[0];  
  else                       toName = "localhost";
  if (toName.equals("localhost")) receiverPort = 222; 
  try { ioSocket = new DatagramSocket(ioPort); }
  catch (Exception e) {
    ioPort = 222; receiverPort = 111;
    ioSocket = new DatagramSocket(ioPort);
  }

  System.out.println("chatpeer1 on port " + ioPort + ". Ctrl Z to quit.");
  new receiver(ioSocket, chatlist);                   // Start receiver
  chatlist.addElement(toName);
  while ((userIn=in.readLine())!=null) {
     sendBuffer = userIn.getBytes();                  // Send chat to all chatters in list
     for (int i=0; i<chatlist.size(); i++) {
       sendPacket = new DatagramPacket( sendBuffer, userIn.length(),
                                        InetAddress.getByName((String)(chatlist.elementAt(i))), 
                                        receiverPort);
       ioSocket.send(sendPacket);
     }
  }
  System.exit(0);                                     // Exit, stopping receiver
 }
}

class receiver implements Runnable {

 DatagramSocket ioSocket;
  Vector chatlist;
 receiver(DatagramSocket ioSocket, Vector chatlist) { // chatlist shared with receiver
   this.ioSocket = ioSocket;
  this.chatlist = chatlist;
   new Thread(this).start();
 }

 public void run() {
   byte receiveBuffer[] = new byte[128];
   DatagramPacket receivePacket;
 
   while(true) {
     receivePacket = new DatagramPacket(receiveBuffer, 128);
     try { ioSocket.receive(receivePacket); }
     catch (Exception e) {}
     System.out.println( "Received " + new String(receivePacket.getData(), 0, 
                                                  receivePacket.getLength()));
     String chatname = receivePacket.getAddress().getHostName();
     if(!chatlist.contains(chatname)) chatlist.addElement(chatname);
  }
 }
}