Hey Galerinha /o/
Alguem por ai ja usou Sockets com NIO?
Quero implementar algo para aprender mas não estou achando exemplos na rede.
Hey Galerinha /o/
Alguem por ai ja usou Sockets com NIO?
Quero implementar algo para aprender mas não estou achando exemplos na rede.
Use algo pronto, porque é bastante difícil.
Para as alternativas ao Apache Mina:
Poxa cara, não pode ser assim “Tenta algo pronto por que é dificil”. O lance é tentar para aprender :thumbup:
Oque eu estava com dificuldades de descobrir era como usava o ByteBuffer que eu nunca tinha visto na vida, mas na verdade é algo bem bobo.
Rodei o codigo e fiz algumas requisições HTTP nele e aparentemente rodou tudo muito bem.
Oque eu achei mais apropriado usando nio é que eu não tive que lidar com nenhuma exception.
package main;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
public class Main {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ServerSocketChannel ssc = ServerSocketChannel.open();
ServerSocket socket = ssc.socket();
InetSocketAddress isa = new InetSocketAddress(9090);
socket.bind(isa);
int read;
ByteBuffer readBuffer = ByteBuffer.allocate(128);
while (true) {
SocketChannel channel = ssc.accept();
while (channel.isOpen() && (read = channel.read(readBuffer)) > 0) {
byte[] bytes = readBuffer.array();
readBuffer.clear();
for (int c1 = 0; c1 < read; c1++) {
System.out.print((char) bytes[c1]);
}
}
ByteBuffer writeBuffer = ByteBuffer.wrap("200".getBytes());
channel.write(writeBuffer);
channel.close();
}
}
}
Do jeito que você fez, é um servidor que atende a um cliente apenas de cada vez; NIO só é vantajoso quando você aprende a usar operações “non-blocking” (usualmente com algum thread pool) usando menos threads que o método normal de usar uma thread para cada cliente.