Hallo,
ich komme leider wieder nicht weiter
und zwar sende ich von Client1 aus eine Nachricht diese kann aber auch nur Client1 lesen und nicht Client2. Aber Client2 - ClientN soll das ja auch lesen können. Ich habe aber keine idee wie ich das machen soll
Mein server code ist:
Wäre super wenn mir jemand nochmal helfen könnte
ich komme leider wieder nicht weiter
und zwar sende ich von Client1 aus eine Nachricht diese kann aber auch nur Client1 lesen und nicht Client2. Aber Client2 - ClientN soll das ja auch lesen können. Ich habe aber keine idee wie ich das machen soll
Mein server code ist:
Java:
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.net.*;
import java.util.*;
import java.nio.charset.*;
public class NonBlockingServer {
public Selector sel = null;
public ServerSocketChannel server = null;
public SocketChannel socket = null;
public int port = 4900;
String result = null;
public NonBlockingServer() {
System.out.println("Inside default ctor");
}
public NonBlockingServer(int port) {
System.out.println("Inside the other ctor");
port = port;
}
public void initializeOperations()
throws IOException, UnknownHostException {
System.out.println("Inside initialization");
sel = Selector.open();
server = ServerSocketChannel.open();
server.configureBlocking(false);
InetAddress ia = InetAddress.getLocalHost();
InetSocketAddress isa =
new InetSocketAddress(ia, port);
server.socket().bind(isa);
}
public void startServer() throws IOException {
System.out.println("Inside startserver");
initializeOperations();
System.out.println("Abt to block on select()");
SelectionKey acceptKey = server.register(sel,
SelectionKey.OP_ACCEPT);
while (acceptKey.selector().select() > 0) {
Set readyKeys = sel.selectedKeys();
Iterator it = readyKeys.iterator();
while (it.hasNext()) {
SelectionKey key =
(SelectionKey) it.next();
it.remove();
if (key.isAcceptable()) {
System.out.println(
"Key is Acceptable");
ServerSocketChannel ssc =
(ServerSocketChannel) key.channel();
socket =
(SocketChannel) ssc.accept();
socket.configureBlocking(false);
SelectionKey another =
socket.register(sel,
SelectionKey.OP_READ
| SelectionKey.OP_WRITE);
}
System.out.println(socket);
if (key.isReadable()) {
System.out.println(
"Key is readable");
String ret = readMessage(key);
if (ret.length() > 0) {
writeMessage(
socket, ret);
}
}
if (key.isWritable()) {
System.out.println("THe key is writable" +key.hashCode());
String ret = readMessage(key);
socket = (SocketChannel) key.channel();
if (result.length() > 0) {
writeMessage(
socket, ret);
}
}
}
}
}
public void writeMessage(SocketChannel socket, String ret) {
System.out.println("Inside the loop");
if (ret.equals("quit") || ret.equals("shutdown")) {
return;
}
System.out.println(ret.getBytes().length);
try {
int nBytes = socket.write(ByteBuffer.wrap(ret.getBytes()));
System.out.println("nBytes = " + nBytes);
result = null;
} catch (Exception e) {
e.printStackTrace();
}
}
public String readMessage(SelectionKey key) {
socket = (SocketChannel) key.channel();
ByteBuffer buf = ByteBuffer.allocate(1024);
try {
socket.read(buf);
buf.flip();
Charset charset =
Charset.forName("us-ascii");
CharsetDecoder decoder =
charset.newDecoder();
CharBuffer charBuffer = decoder.decode(buf);
result = charBuffer.toString();
charBuffer.clear();
} catch (IOException e) {
e.printStackTrace();
}
buf.clear();
return result;
}
public static void main(String args[]) {
NonBlockingServer nb = new NonBlockingServer();
try {
nb.startServer();
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
}
}
Wäre super wenn mir jemand nochmal helfen könnte