Rumah > Java > javaTutorial > teks badan

Bagaimana untuk melaksanakan klien SocketChannel dalam java

王林
Lepaskan: 2023-04-17 22:28:01
ke hadapan
1447 orang telah melayarinya

1. Langkah

(1) Buat contoh SocketChannel dan konfigurasikannya dalam mod bukan sekatan Hanya dalam contoh SocketChannel, sebarang operasi I/O tidak menyekat.

(2) Gunakan kaedah connect() untuk menyambung ke pelayan dan gunakan gelung sementara untuk mengesan dan melengkapkan sambungan secara berterusan. Anda mesti menggunakan finishConnect() untuk melengkapkan proses sambungan sebelum operasi I/O segera diperlukan.

(3) Gunakan ByteBuffer untuk membaca dan menulis bait Jika SelectableChannel berada dalam mod tidak menyekat, maka operasi I/Onya mungkin membaca dan menulis lebih sedikit bait daripada bait sebenar, atau bahkan tiada. Oleh itu, kami menggunakan pembacaan dan penulisan berterusan dalam satu gelung untuk memastikan pembacaan dan penulisan selesai.

2. Contoh

public class NonBlockingTCPClient {
    public static void main(String[] args) {
        byte[] data = "hello".getBytes();
        SocketChannel channel = null;
        try {
            // 1. open a socket channel
            channel = SocketChannel.open();
            // adjust to be nonblocking
            channel.configureBlocking(false);
            // 2. init connection to server and repeatedly poll with complete
            // connect() and finishConnect() are nonblocking operation, both return immediately
            if (!channel.connect(new InetSocketAddress(InetAddress.getLocalHost(), 8899))) {
                while (!channel.finishConnect()) {
                    System.out.print(".");
                }
            }
 
            System.out.println("Connected to server...");
 
            ByteBuffer writeBuffer = ByteBuffer.wrap(data);
            ByteBuffer readBuffer = ByteBuffer.allocate(data.length);
            int totalBytesReceived = 0;
            int bytesReceived;
            // 3. read and write bytes
            while (totalBytesReceived < data.length) {
                if (writeBuffer.hasRemaining()) {
                    channel.write(writeBuffer);
                }
                if ((bytesReceived = channel.read(readBuffer)) == -1) {
                    throw new SocketException("Connection closed prematurely");
                }
                totalBytesReceived += bytesReceived;
                System.out.print(".");
            }
            System.out.println("Server said: " + new String(readBuffer.array()));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 4 .close socket channel
            try {
                if (channel != null) {
                    channel.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan klien SocketChannel dalam java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan