java.net.InetSocketAddress
java.net.SocketAddress
class="java">import java.net.SocketAddress; import java.net.InetSocketAddress; import java.nio.channels.SocketChannel; // 连接 SocketAddress address = new InetSocketAddress("127.0.0.1", 11111); int soTimeout = 60000; SocketChannel channel = SocketChannel.open(); channel.socket().setSoTimeout(soTimeout); channel.connect(address); // 读 import java.nio.ByteBuffer; import java.nio.ByteOrder; Object readDataLock = new Object(); ByteBuffer readHeader = ByteBuffer.allocate(4).order(ByteOrder.BIG_ENDIAN); synchronized (readDataLock) { readHeader.clear(); while(readHeader.hasRemaining()){ int r = channel.read(readHeader); if (r == -1) { throw new IOException "end of stream when reading header" } } int bodyLen = readHeader.getInt(0); ByteBuffer bodyBuf = ByteBuffer.allocate(bodyLen).order(ByteOrder.BIG_ENDIAN); while(bodyBuf.hasRemaining()){ int r = channel.read(bodyBuf); } } // 写 Object writeDataLock = new Object(); ByteBuffer writeHeader = ByteBuffer.allocate(4).order(ByteOrder.BIG_ENDIAN); // body = Packet.newBuilder().setType().setBody(xx.toByteString).build().toByteArray(); synchronized(writeDataLock){ writeHeader.clear(); writeHeader.putInt(body.length); writeHeader.flip(); channel.write(writeHeader); channel.write(ByteBuffer.wrap(body)); }
?