Java nätverksprogrammering
Hej!
Jag håller på att skriva ett "Skissa och gissa"-program som hobbyprojekt. Just nu har jag kommit så långt att man kan rita och chatta. Alltså har jag lyckats komma en bit med nätverksprogrammeringen.
Problemet jag har är när man ska skicka linjerna som är ritade över nätverk. Hur ska jag veta om det är ett chattmeddelande eller en linje som kommer?
Som ni ser här under använder jag mig av MulticastSocket i min Chat-klass för att många användare ska kunna ansluta sig.
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
public class Chat implements ActionListener, KeyListener, Runnable {
private JTextArea show;
private JTextField write;
private Player player;
private Thread thread = new Thread(this);
private int port;
private MulticastSocket so;
private InetAddress ina;
/**
* Creates a new Chat with the specific {@link JTextArea} and {@link JTextField}.
* @param show A {@link JTextArea} that is used in class {@link ChatArea} to show messages
* @param write A {@link JTextField} that is used in class {@link ChatArea} to write messages
* @see ChatArea
*/
public Chat(JTextArea show, JTextField write, Player player, MulticastSocket so, InetAddress ina, int port) {
this.show = show;
this.write = write;
this.player = player;
this.so = so;
this.ina = ina;
this.port = port;
try {
so = new MulticastSocket(port);
ina = InetAddress.getByName("234.235.236.238");
so.joinGroup(ina);
thread.start();
send("Connected");
}
catch(IOException e) {
System.out.println(e);
}
}
public void run() {
byte[] data = new byte[1024];
while(true) {
try {
DatagramPacket packet = new DatagramPacket(data, data.length);
so.receive(packet);
String message = new String(data, 0, packet.getLength());
show.append(message);
}
catch (IOException e){
break;
}
}
}
/**
* Changes the text in {@link JTextArea} and remove text in {@link JTextField}
*/
public void send(String s) {
byte[] data = (player.getName() + ": " + s + "\n").getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, ina, port);
try {
so.send(packet);
}
catch(IOException e) {
System.out.println(e);
}
}
}