Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Oct 1998 23:35:56 -0800
From:      Mahadevan Iyer <iyer@internetdevices.com>
To:        java-port@FreeBSD.ORG, freebsd-java@FreeBSD.ORG, saurabh@internetdevices.com, iyer@internetdevices.com, namit@internetdevices.com
Subject:   Possible Bug in JVM socket code on FreeBSD, java.net.Socket
Message-ID:  <36381ADB.DCCDAB3D@internetdevices.com>

next in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]


[-- Attachment #2 --]
import java.net.*;
import java.io.*;
import java.util.*;

class DataThread extends Thread {
  Vector _connections;
  public DataThread(Vector connections) {
    _connections = connections;
  }

  public void run() {
    int i = 0;
    String[] message = {
	"Hello",
	"how",
	"are",
	"you"
    };
    while(true) {
      i++;
      try {
        Thread.sleep(100);
	if(_connections.isEmpty())
	  continue;
        int index = i % _connections.size();
	Socket s = (Socket)_connections.elementAt(index);
	try {
	  s.getOutputStream().write(message[i % 4].getBytes());
	}
	catch(Exception e) {
	  System.out.println("Removing socket : " + String.valueOf(index));
          _connections.removeElementAt(index);
	}
	System.out.print('.');
      }
      catch(Exception e) {
	e.printStackTrace();
      }
    }
  }
}

public class TServer {

  ServerSocket _server;
  Vector _clients;

  public TServer(int port) throws Exception {
    _server = new ServerSocket(port);
    System.out.println("Listening on port : " + String.valueOf(port));

    _clients = new Vector(); 
    DataThread dt = new DataThread(_clients);
    dt.start();
    while(true) {
      try {
        Socket s = _server.accept();
	_clients.addElement(s);
	System.out.println("Accepted connection : " + String.valueOf(_clients.size()));
      }
      catch(Exception e) {
	System.out.println("Error Accepting connection : " + String.valueOf(_clients.size()));
	e.printStackTrace();
	break;
      } 
    }
  }

  public static void main(String[] args) throws Exception {
    if(args.length == 0) {
      System.out.println("Usage: java TServer <port>");
      System.exit(1);
    }

    int port = Integer.parseInt(args[0]);
    TServer server = new TServer(port);
  }
}



[-- Attachment #3 --]
import java.net.*;
import java.io.*;
import java.util.*;

public class TClient {

  Vector _connections;

  public TClient(String host, int port, int max) throws Exception {
    _connections = new Vector();
    System.out.println("Initializing TClient");
    if(System.getProperty("DELAY") != null)
	System.out.println("Using DELAY");
    else
	System.out.println("NOT Using DELAY");
    long t1 = System.currentTimeMillis();
    while(_connections.size() < max) {
      try {
        Socket s = new Socket(host, port);
	System.out.println("Connection # : " + String.valueOf(_connections.size()));
        _connections.addElement(s);
	if(System.getProperty("DELAY") != null) {
	  System.out.println("DELAY");
	  Thread.sleep(10);
	}
      }
      catch(Exception e) {
	System.out.println("Error Connection # : " + String.valueOf(_connections.size()));
	e.printStackTrace();
	break;
      }
    }
    long t2 = System.currentTimeMillis();
    System.out.println("Average Connection time : " + 
				String.valueOf( (t2 - t1)/max));
  }

  public void poll() {
    try {
      while(true) {
        for(int i = 0; i < _connections.size(); i++) {
    	  Socket  s = (Socket)(_connections.elementAt(i));
          if(s.getInputStream().available() > 0) {
 	    byte[] data = new byte[s.getInputStream().available()];
	    s.getInputStream().read(data);
	    String message = new String(data);
	    // System.out.print(String.valueOf(i) + " : " + message + "; ");
	    System.out.print(String.valueOf(i) +  "; ");
	  }
        }
        Thread.sleep(100);
        System.out.print('.');
      }
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }

  public static void main(String[] args) throws Exception {
    if(args.length < 3) {
      System.out.println("Usage: java TClient <server> <port> <maxconnections>");
      System.exit(1);
    }
   
    int port = Integer.parseInt(args[1]);
    int max = Integer.parseInt(args[2]);
    TClient client = new TClient(args[0], port, max);
    client.poll();
  }
}

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?36381ADB.DCCDAB3D>