niekfct
Terugkerende gebruiker
- Lid geworden
- 19 jul 2006
- Berichten
- 1.563
Hoi
Voor een project moeten wij een spel maken, en dit doen we in Netbeans. Nu hebben we uitgevogeld hoe we via gedeelde mappen van MSN gelijktijdig op 10km afstand in hetzelfde project kunnen werken. Het enige punt is, dat je allebei in hetzelfde bestand kunt schrijven.
Nu heb ik van een oude simpele client/server chat implementatie de source code zodanig omgeschreven, zodat ik een mooi programmaatje heb dat laat zien welke files op dat moment worden gebruikt (De een klikt op een checkbox met de filenaam, de ander ziet dat en gaat niet in die file werken).
Werkt prima, alleen wordt mijn pc er onmeunig traag van. Ik kan zelf zo snel de bug niet vinden, dus vandaar mijn vraag.
Is er iemand die dit ziet? Hoe kan ik dit verbeteren? (Als dat al kan?
)
Alvast bedankt!
Niek
[edit]Her en der kloppen de pre- en postcondities in de javadoc niet, geen moeite genomen om dit aan te passen
[/edit]
Voor een project moeten wij een spel maken, en dit doen we in Netbeans. Nu hebben we uitgevogeld hoe we via gedeelde mappen van MSN gelijktijdig op 10km afstand in hetzelfde project kunnen werken. Het enige punt is, dat je allebei in hetzelfde bestand kunt schrijven.
Nu heb ik van een oude simpele client/server chat implementatie de source code zodanig omgeschreven, zodat ik een mooi programmaatje heb dat laat zien welke files op dat moment worden gebruikt (De een klikt op een checkbox met de filenaam, de ander ziet dat en gaat niet in die file werken).
Werkt prima, alleen wordt mijn pc er onmeunig traag van. Ik kan zelf zo snel de bug niet vinden, dus vandaar mijn vraag.
Is er iemand die dit ziet? Hoe kan ik dit verbeteren? (Als dat al kan?

Code:
public class ClassFiles
{
public static String[] FILES =
{
"file1","file2", "file3"
};
}
Code:
public class Client
{
private static final String USAGE =
"usage: java Client <address> <port>";
/** Start een Client-applicatie op. */
public static void main(String[] args)
{
if (args.length != 2)
{
System.out.println(USAGE);
System.exit(0);
}
InetAddress addr = null;
int port = 0;
Socket sock = null;
try
{
System.out.print("Serveradres wordt ingelezen..");
if (args[0] != null)
{
addr = InetAddress.getByName(args[0]);
System.out.println(" Ok.");
}
System.out.print("Poort wordt ingelezen..");
if (args[1] != null)
{
port = Integer.parseInt(args[1]);
System.out.println(" Ok.");
}
} catch (UnknownHostException e)
{
System.err.println("Er is een fout opgetreden: " + e);
} catch (NumberFormatException e)
{
System.err.println("Voer een geldige poort in!");
}
// try to open a Socket to the server
try
{
sock = new Socket(addr, port);
} catch (IOException e)
{
System.out.println("ERROR: could not create a socket on " +
addr + " and port " + port);
}
// create Peer object and start the two-way communication
try
{
Peer client = new Peer(sock);
Thread streamInputHandler = new Thread(client);
streamInputHandler.start();
//client.shutDown();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
Code:
public class Peer implements Runnable
{
protected Socket sock;
protected BufferedReader in;
protected BufferedWriter out;
private Venster v;
/**
* Constructor. Construeert een Peer-object met de gegeven naam
* en de meegegeven sock. Initialiseert de input- en outputstreams.
* @require (name != null) && (sock != null)
* @param naam naam van dit Peer-proces
* @param sock Socket van dit Peer-proces
*/
public Peer(Socket sock) throws IOException
{
this.sock = sock;
this.in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
this.out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
v = new Venster(this);
}
/**
* Leest Strings uit de stream van de socket-verbinding en
* schrijft deze karakters naar de standard output.
*/
public void run()
{
while (true)
{
try
{
String s = "";
if (in.ready())
{
s = in.readLine();
v.process(s);
}
} catch (IOException e)
{
System.err.println("Er is een foutJE opgetreden: " + e);
System.exit(0);
}
}
}
public void stuur(String s)
{
try
{
this.out.write(s);
this.out.flush();
} catch (IOException ex)
{
}
}
}
Code:
public class Server
{
private static final String USAGE =
"usage: java Server <name> <port>";
/** Start een Server-applicatie op. */
public static void main(String[] args)
{
if (args.length != 2)
{
System.out.println(USAGE);
System.exit(0);
}
String name = null;
System.out.print("Naam wordt ingelezen..");
if (args[0] != null && !(args[0].equals("")))
{
name = args[0];
System.out.println(" Ok.");
}
int port = -1;
try
{
System.out.print("Poort wordt ingelezen..");
port = Integer.parseInt(args[1]);
System.out.println(" Ok.");
if (port != -1 && name != null)
{
System.out.print("Nieuwe ServerSocket wordt aangemaakt..");
ServerSocket sSock = new ServerSocket(port);
System.out.println(" Ok.");
while (true)
{
System.out.println("Wachten op verbindingen..");
Socket sock = sSock.accept();
System.out.println("Verbinding gemaakt..");
Peer peer = new Peer(sock);
new Thread(peer).start();
//peer.shutDown();
}
}
} catch (NumberFormatException e)
{
System.err.println("Voer een geldige poort in!");
} catch (IOException e)
{
System.err.println("Er is een fout opgetreden: " + e);
}
}
}
Code:
public class Venster extends JFrame implements ActionListener
{
private JCheckBox[] classFiles;
Peer p;
public Venster(Peer p)
{
this.p = p;
addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
classFiles = new JCheckBox[ClassFiles.FILES.length];
setLayout(new GridLayout(classFiles.length, 1));
for (int i = 0; i < classFiles.length; i++)
{
classFiles[i] = new JCheckBox(ClassFiles.FILES[i]);
add(classFiles[i]);
classFiles[i].addActionListener(this);
}
setSize(getPreferredSize());
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
String s = "";
//kijk welk object het vandaan kwam
for (int i = 0; i < classFiles.length; i++)
{
if (e.getSource().equals(classFiles[i]))
{
//geef het nummer van de checkbox mee
s = i + "";
//geef mee of de checkbox geselecteerd is
if (classFiles[i].isSelected())
{
s = s + "s";
} else
{
s = s + "d";
}
}
}
p.stuur(s + "\n");
}
public void process(String s)
{
//lees het nummer van de checkbox
int e = Integer.parseInt(s.substring(0, s.length() - 1));
//kijk of hij geselecteerd moet worden of niet
if (s.charAt(s.length() - 1) == 's')
{
classFiles[e].setSelected(true);
classFiles[e].setEnabled(false);
} else
{
classFiles[e].setSelected(false);
classFiles[e].setEnabled(true);
}
}
}
Alvast bedankt!

Niek
[edit]Her en der kloppen de pre- en postcondities in de javadoc niet, geen moeite genomen om dit aan te passen


Laatst bewerkt: