⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpclient.java

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 JAVA
字号:
// Copyright (c) 2005 Brian Wellington (bwelling@xbill.org)package org.xbill.DNS;import java.io.*;import java.net.*;import java.nio.*;import java.nio.channels.*;final class TCPClient extends Client {publicTCPClient(long endTime) throws IOException {	super(SocketChannel.open(), endTime);}voidconnect(SocketAddress addr) throws IOException {	SocketChannel channel = (SocketChannel) key.channel();	if (channel.connect(addr))		return;	key.interestOps(SelectionKey.OP_CONNECT);	try {		while (!channel.finishConnect()) {			if (!key.isConnectable())				blockUntil(key, endTime);		}	}	finally {		if (key.isValid())			key.interestOps(0);	}}voidsend(byte [] data) throws IOException {	SocketChannel channel = (SocketChannel) key.channel();	verboseLog("TCP write", data);	byte [] lengthArray = new byte[2];	lengthArray[0] = (byte)(data.length >>> 8);	lengthArray[1] = (byte)(data.length & 0xFF);	ByteBuffer [] buffers = new ByteBuffer[2];	buffers[0] = ByteBuffer.wrap(lengthArray);	buffers[1] = ByteBuffer.wrap(data);	int nsent = 0;	key.interestOps(SelectionKey.OP_WRITE);	try {		while (nsent < data.length + 2) {			if (key.isWritable()) {				long n = channel.write(buffers);				if (n < 0)					throw new EOFException();				nsent += (int) n;			} else				blockUntil(key, endTime);		}	}	finally {		if (key.isValid())			key.interestOps(0);	}}private byte []_recv(int length) throws IOException {	SocketChannel channel = (SocketChannel) key.channel();	int nrecvd = 0;	byte [] data = new byte[length];	ByteBuffer buffer = ByteBuffer.wrap(data);	key.interestOps(SelectionKey.OP_READ);	try {		while (nrecvd < length) {			if (key.isReadable()) {				long n = channel.read(buffer);				if (n < 0)					throw new EOFException();				nrecvd += (int) n;			} else				blockUntil(key, endTime);		}	}	finally {		if (key.isValid())			key.interestOps(0);	}	return data;}byte []recv() throws IOException {	byte [] buf = _recv(2);	int length = ((buf[0] & 0xFF) << 8) + (buf[1] & 0xFF);	byte [] data = _recv(length);	verboseLog("TCP read", data);	return data;}static byte []sendrecv(SocketAddress addr, byte [] data, long endTime) throws IOException {	TCPClient client = new TCPClient(endTime);	try {		client.connect(addr);		client.send(data);		return client.recv();	}	finally {		client.cleanup();	}}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -