Giriş
Şu satırı dahil ederiz.
accept metodu
SocketChannel nesnesi döndürür.
Şu satırı dahil ederiz.
import java.nio.channels.ServerSocketChannel;
TCP sunucusudur. TCP istemcisi için SocketChannel sınıfı kullanlır. Bu sınıfın read() metodu yoktur. accept() metodu bir SocketChannel döndürür ve okuma için bu nesne kullanılır.accept metodu
SocketChannel nesnesi döndürür.
Örnek
Şöyle yaparız.
close metodu
Şöyle yaparız.
ServerSocketChannel soyut bir sınıf olduğu için open metodu çağırmaya gerek var.
SocketChannel channel = server.accept();
Örnek
Şöyle yaparız. Sunucu, soketten veri okuyor
try {
InetSocketAddress listenAddr = new InetSocketAddress(9026);
ServerSocketChannel listener = ServerSocketChannel.open();
ServerSocket serverSocket = listener.socket();
serverSocket.setReuseAddress(true);
serverSocket.bind(listenAddr);
System.out.println("Listening on port : " + listenAddr.toString());
ByteBuffer buffer = ByteBuffer.allocate(4096);
while(true) {
SocketChannel socketChannel = listener.accept();
System.out.println("Accepted : " + socketChannel);
socketChannel.configureBlocking(true);
int nread = 0;
while (nread != -1) {
try {
nread = socketChannel.read(buffer);
} catch (IOException e) {
...
nread = -1;
}
buffer.rewind();
}
}
} catch (IOException e) {
...
}
Şöyle yaparız.
channel.close();
open metoduServerSocketChannel soyut bir sınıf olduğu için open metodu çağırmaya gerek var.
setOption metodu
Windows'ta desteklenmeyen bir sürü seçenek var. Bir açıklama burada
setOption metodu - SO_REUSEPORT
Bu seçenek aynı porta çoklu listener socket takmak için kullanılır. POSIX sistemlerde çalışıyor ancak
Windows'ta AsyncSocketOptions.SO_REUSEPORT desteklenmiyor. Hata şöyle
java.lang.UnsupportedOperationException: 'SO_REUSEPORT' not supported
supportedOptions metodu
Şöyle yaparız
import java.net.SocketOption;
import java.net.StandardSocketOptions;
SocketOption socketOption = StandardSocketOptions.SO_REUSEPORT;
channel.supportedOptions().contains(socketOption);
Hiç yorum yok:
Yorum Gönder