Dieses Mal werde ich kurz zusammenfassen, wie SocketChannel verwendet wird. Bitte beziehen Sie sich auf den Ablauf wie folgt.
--Klient
- Verbinden Sie den Server über SocketChannel
- Bereiten Sie einen Datenpuffer vor und schreiben / lesen Sie auf den Server
- Schließen Sie den Socket-Kanal
--Server
- Binden Sie die iP-Adresse und den Anschluss
- Rufen Sie eine Instanz von SocketChannel mit der ServerSocketChannelImpl.accept () -Methode ab
- Bereiten Sie einen Datenpuffer vor und schreiben / lesen Sie in den Client
- Schließen Sie SocketChannel und ServerSocketChannel
Lassen Sie uns dann von hier aus eine Kommunikationsdemo von Client und Server erstellen.
Der Quellcode lautet wie folgt.
package socketchannel;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
public class WebClient {
public static void main(String[] args) throws IOException {
// 1. Erstellen wir eine SocketChannel-Instanz mit der SocketChannel open () -Methode SocketChannel socketChannel = SocketChannel.open();
// 2. Stellen Sie eine Verbindung zum Server her socketChannel.connect(new InetSocketAddress("127.0.0.1", 3333));
// 3. Bereiten Sie die Daten vor, die an den Server gesendet werden sollen ByteBuffer writeBuffer = ByteBuffer.allocate(128); writeBuffer.put("hello WebServer this is from WebClient".getBytes()); writeBuffer.flip(); socketChannel.write(writeBuffer); ByteBuffer readBuffer = ByteBuffer.allocate(128); socketChannel.read(readBuffer); StringBuilder stringBuffer=new StringBuilder();
// 4. Daten vom Server empfangen readBuffer.flip(); while (readBuffer.hasRemaining()) { stringBuffer.append((char) readBuffer.get()); } System.out.println ("Nachricht vom Server:" + stringBuffer); socketChannel.close(); } }
Der Quellcode auf der Serverseite lautet wie folgt.
package socketchannel;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
public class WebServer {
public static void main(String args[]) throws IOException {
try {
// 1. Erstellen wir eine Instanz von ServerSocketChannel mit der open () -Methode von ServerSocketChannel ServerSocketChannel ssc = ServerSocketChannel.open();
// 2. IP und Port binden ssc.socket().bind(new InetSocketAddress("127.0.0.1", 3333));
//ServerSocketChannelImplのaccept()メソッドでSocketChannelインスタンスをもらってクライアントへの書き読み SocketChannel socketChannel = ssc.accept();
// 3. Bereiten Sie die zu exportierenden Daten vor ByteBuffer writeBuffer = ByteBuffer.allocate(128); writeBuffer.put("hello WebClient this is from WebServer".getBytes()); writeBuffer.flip(); socketChannel.write(writeBuffer); ByteBuffer readBuffer = ByteBuffer.allocate(128);
//// 4. Bereiten Sie die zu lesenden Daten vor socketChannel.read(readBuffer); StringBuilder stringBuffer=new StringBuilder();
readBuffer.flip();
while (readBuffer.hasRemaining()) {
stringBuffer.append((char) readBuffer.get());
}
System.out.println ("Daten vom Client empfangen:" + stringBuffer); socketChannel.close(); ssc.close(); } catch (IOException e) { e.printStackTrace(); } } }
Wenn Sie die obige Demo ausführen und sie funktioniert, sieht das Ergebnis folgendermaßen aus:
Vielen Dank für das Lesen bis zum Ende.
Recommended Posts