J'ai un problème avec une partie multijoueur. En ce moment, j'essaye juste d'obtenir que le serveur envoie le niveau courant au client. Le serveur envoie définitivement les données, mais il ne parvient jamais à l'application cliente.Problème avec Java selector/SocketChannel
Code client:
public void run() {
while(true)
{
try {
sel.select();
Set readyKeys = sel.selectedKeys();
Iterator itr = readyKeys.iterator();
while(itr.hasNext())
{
SelectionKey key = (SelectionKey) itr.next();
itr.remove();
SocketChannel ch = (SocketChannel) key.channel();
if(key.isReadable())
{
inputbuf.clear();
long bytesRead = ch.read(inputbuf);
inputbuf.flip();
byte[] test = inputbuf.array();
{
for(int i=0; i < inputbuf.remaining(); i++)
{
System.out.print(test[i]+" ");
}
}
byte cmd = 0;
cmd = inputbuf.get();
switch(cmd)
{
case 1:
//do something
case 2:
//do something else
break;
}
}
else if(key.isConnectable())
{
sc.finishConnect();
sc.register(sel, SelectionKey.OP_READ);
}
}
} catch (IOException ex) {
Buildsim.error("Error handling input from server", ex);
}
}
}
Code Serveur:
public RemotePlayer(SocketChannel s)
{
sc = s;
try {
sel = Selector.open();
sc.configureBlocking(false);
sc.register(sel, SelectionKey.OP_WRITE);
socket = sc.socket();
ip = socket.getInetAddress().toString();
System.out.println("New connection from "+ip);
inputbuf = ByteBuffer.allocate(1048576);
outputbuf = ByteBuffer.allocate(1048576);
inputbuf.clear();
outputbuf.clear();
}
catch(Exception e)
{
Buildsim.error("Connection error: ", e);
}
sendLevel();
}
public void sendObject(GameObject obj)
{
//Sends a packet of the object, then does the same for the object's children
}
public void sendLevel()
{
try {
outputbuf.put((byte) 0x01);
outputbuf.flip();
sc.write(outputbuf);
sendObject(Buildsim.w.parts.get(0)); //root object
}
catch(IOException e)
{
Buildsim.error("Error sending level to "+ip, e);
}
}
La seule chose qui arrive au client est le 0x01 octet (signale un changement de niveau).
Merci d'avance.
Dites-nous ce que vous avez fait pour essayer de l'analyser et de le déboguer. – bmargulies
Avez-vous vu l'édition à ma réponse? – rsp