Cette fois, je vais résumer brièvement comment utiliser SocketChannel. Veuillez vous référer au flux comme suit.
--Client
- Connectez le serveur via SocketChannel
- Préparez un tampon de données et écrivez / lisez sur le serveur
- Fermer le canal de prise
--Serveur
- Lier l'adresse IP et le port
- Obtenez une instance de SocketChannel avec la méthode ServerSocketChannelImpl.accept ()
- Préparer un tampon de données et écrire / lire sur le client
- Fermez SocketChannel et ServerSocketChannel
Ensuite, faisons une démonstration de communication du client et du serveur à partir d'ici.
Le code source est le suivant.
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. Créons une instance SocketChannel avec la méthode SocketChannel open () SocketChannel socketChannel = SocketChannel.open();
// 2. Connectez-vous au serveur socketChannel.connect(new InetSocketAddress("127.0.0.1", 3333));
// 3. Préparez les données à envoyer au serveur 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. Recevoir les données du serveur readBuffer.flip(); while (readBuffer.hasRemaining()) { stringBuffer.append((char) readBuffer.get()); } System.out.println ("Message du serveur:" + stringBuffer); socketChannel.close(); } }
Le code source côté serveur est le suivant.
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. Créons une instance de ServerSocketChannel avec la méthode open () de ServerSocketChannel ServerSocketChannel ssc = ServerSocketChannel.open();
// 2. Lier l'IP et le port ssc.socket().bind(new InetSocketAddress("127.0.0.1", 3333));
//ServerSocketChannelImplのaccept()メソッドでSocketChannelインスタンスをもらってクライアントへの書き読み SocketChannel socketChannel = ssc.accept();
// 3. Préparez les données à exporter 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. Préparez les données à lire socketChannel.read(readBuffer); StringBuilder stringBuffer=new StringBuilder();
readBuffer.flip();
while (readBuffer.hasRemaining()) {
stringBuffer.append((char) readBuffer.get());
}
System.out.println ("Recevoir les données du client:" + stringBuffer); socketChannel.close(); ssc.close(); } catch (IOException e) { e.printStackTrace(); } } }
Eh bien, si vous exécutez la démo ci-dessus et que cela fonctionne, vous obtiendrez les résultats suivants:
Merci d'avoir lu jusqu'au bout.
Recommended Posts