Compare commits
2 Commits
249278e578
...
76abd681aa
Author | SHA1 | Date |
---|---|---|
louzin | 76abd681aa | 6 months ago |
louzin | b94c6f30bd | 6 months ago |
7 changed files with 269 additions and 0 deletions
@ -0,0 +1,28 @@ |
|||||||
|
package com.louzin.niodemo; |
||||||
|
|
||||||
|
import static java.lang.Thread.sleep; |
||||||
|
|
||||||
|
public class demo{ |
||||||
|
public static void main(String[] args) throws InterruptedException { |
||||||
|
Runnable rb=new Data(); |
||||||
|
Thread td =new Thread(rb); |
||||||
|
td.start(); |
||||||
|
while(true){ |
||||||
|
sleep(1000); |
||||||
|
System.out.print(3); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
class Data implements Runnable { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
while(true) { |
||||||
|
try { |
||||||
|
sleep(1000); |
||||||
|
} catch (InterruptedException e) { |
||||||
|
throw new RuntimeException(e); |
||||||
|
} |
||||||
|
System.out.print("2"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package com.louzin.niodemo; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
import java.io.FileNotFoundException; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.RandomAccessFile; |
||||||
|
import java.nio.ByteBuffer; |
||||||
|
import java.nio.channels.FileChannel; |
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
|
||||||
|
public class nioFileChannelTest { |
||||||
|
@Test |
||||||
|
public void testRead() throws IOException { |
||||||
|
RandomAccessFile randomAccessFile = new RandomAccessFile("src/main/resources/mytest.txt","rw"); |
||||||
|
FileChannel fileChannel = randomAccessFile.getChannel(); |
||||||
|
//buffer
|
||||||
|
ByteBuffer allocate = ByteBuffer.allocate(1024); |
||||||
|
fileChannel.read(allocate); |
||||||
|
System.out.println(allocate.position()); |
||||||
|
allocate.put("aac".getBytes(StandardCharsets.UTF_8)); |
||||||
|
System.out.println(allocate.position()); |
||||||
|
allocate.flip(); |
||||||
|
while (allocate.hasRemaining()) |
||||||
|
System.out.print((char) allocate.get()); |
||||||
|
fileChannel.close(); |
||||||
|
allocate.clear(); |
||||||
|
randomAccessFile.close(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.louzin.niodemo.scatterandgather; |
||||||
|
//scatter 分散:将数据分散到多个buffer中
|
||||||
|
//ByteBuffer header = ByteBuffer.allocate(128);
|
||||||
|
//ByteBuffer body=ByteBuffer.allocate(1024);
|
||||||
|
//ByteBuffer[] byteBuffers={header,body};
|
||||||
|
//channel.read(byteBuffers);
|
||||||
|
//
|
||||||
|
//scatter Reads只适合固定消息,不适合动态消息
|
||||||
|
|
||||||
|
//gahter 聚集:将多个buffer的数据发送到同一个channel
|
||||||
|
//ByteBuffer header = ByteBuffer.allocate(128);
|
||||||
|
//ByteBuffer body=ByteBuffer.allocate(1024);
|
||||||
|
//ByteBuffer[] byteBuffers={header,body};
|
||||||
|
//channel.write(byteBuffers);
|
@ -0,0 +1,39 @@ |
|||||||
|
package com.louzin.niodemo.socketnioclienttest; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.net.InetSocketAddress; |
||||||
|
import java.net.SocketAddress; |
||||||
|
import java.nio.ByteBuffer; |
||||||
|
import java.nio.channels.DatagramChannel; |
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
|
||||||
|
//无连接,面向udp,可任意发送和接受数据包
|
||||||
|
//UDP不存在真正意义上的连接
|
||||||
|
//以下的连接是向特定服务器read和write接受和发包
|
||||||
|
public class datagramChannel { |
||||||
|
@Test |
||||||
|
public void datagramChannelTest() throws IOException { |
||||||
|
DatagramChannel open = DatagramChannel.open(); |
||||||
|
open.bind(new InetSocketAddress("www.baidu.com",10086)); |
||||||
|
//receive udp data package
|
||||||
|
ByteBuffer allocate = ByteBuffer.allocate(64); |
||||||
|
allocate.clear(); |
||||||
|
SocketAddress receive = open.receive(allocate); |
||||||
|
//发送数据包
|
||||||
|
//打开同DatagramChannel open
|
||||||
|
//配置发送内容
|
||||||
|
ByteBuffer wrap = ByteBuffer |
||||||
|
.wrap("client send".getBytes(StandardCharsets.UTF_8)); |
||||||
|
//发送数据包
|
||||||
|
open.send(wrap,new InetSocketAddress("",80)); |
||||||
|
//read和write只有在connect后才能使用,不然NotYetConnectException
|
||||||
|
//read未接受到包时PortUnreachableException
|
||||||
|
open.connect(new InetSocketAddress("",10086)); |
||||||
|
int readSize = open.read(allocate); |
||||||
|
open.write(wrap); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,89 @@ |
|||||||
|
package com.louzin.niodemo.socketnioclienttest; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.net.InetAddress; |
||||||
|
import java.net.InetSocketAddress; |
||||||
|
import java.net.SocketAddress; |
||||||
|
import java.nio.Buffer; |
||||||
|
import java.nio.ByteBuffer; |
||||||
|
import java.nio.channels.ByteChannel; |
||||||
|
import java.nio.channels.DatagramChannel; |
||||||
|
import java.nio.charset.Charset; |
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
|
||||||
|
public class datagramChannel2 { |
||||||
|
//send
|
||||||
|
@Test |
||||||
|
public void sendDataPackage() throws IOException, InterruptedException { |
||||||
|
//get Channel
|
||||||
|
DatagramChannel open = DatagramChannel.open(); |
||||||
|
InetSocketAddress l = new InetSocketAddress("localhost", 9999); |
||||||
|
open.configureBlocking(false); |
||||||
|
//send
|
||||||
|
while (true){ |
||||||
|
open.send(ByteBuffer.wrap("UDPUDPUDP".getBytes(StandardCharsets.UTF_8)),l); |
||||||
|
System.out.println("发送完成"); |
||||||
|
Thread.sleep(1000); |
||||||
|
} |
||||||
|
} |
||||||
|
@Test |
||||||
|
public void receiveDataPackage() throws IOException { |
||||||
|
DatagramChannel open = DatagramChannel.open(); |
||||||
|
open.bind(new InetSocketAddress("localhost",9999)); |
||||||
|
//通过buffer读取
|
||||||
|
ByteBuffer allocate = ByteBuffer.allocate(1024); |
||||||
|
while (true){ |
||||||
|
allocate.clear(); |
||||||
|
SocketAddress receive = open.receive(allocate); |
||||||
|
allocate.flip(); |
||||||
|
System.out.println(receive.toString()); |
||||||
|
//发送时含有中文,编码处理
|
||||||
|
System.out.println(Charset.forName("UTF-8").decode(allocate)); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
@Test() |
||||||
|
public void readWriteTest() throws IOException { |
||||||
|
DatagramChannel open = DatagramChannel.open(); |
||||||
|
open.bind(new InetSocketAddress(9999)); |
||||||
|
open.connect(new InetSocketAddress("localhost",9999)); |
||||||
|
open.write(ByteBuffer.wrap("发送12332111111!!!".getBytes(StandardCharsets.UTF_8))); |
||||||
|
ByteBuffer allocate = ByteBuffer.allocate(64); |
||||||
|
while (true){ |
||||||
|
allocate.clear(); |
||||||
|
open.read(allocate); |
||||||
|
allocate.flip(); |
||||||
|
System.out.println(Charset.forName("UTF-8").decode(allocate)); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
@Test |
||||||
|
public void writeTest() throws IOException, InterruptedException { |
||||||
|
DatagramChannel open = DatagramChannel.open(); |
||||||
|
open.bind(new InetSocketAddress("localhost",9990)); |
||||||
|
open.connect(new InetSocketAddress("localhost",9990)); |
||||||
|
while (true){ |
||||||
|
open.write(ByteBuffer.wrap("发送!!!".getBytes(StandardCharsets.UTF_8))); |
||||||
|
System.out.println("发送成功"); |
||||||
|
Thread.sleep(1000); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
@Test |
||||||
|
public void readTest() throws IOException, InterruptedException { |
||||||
|
DatagramChannel open = DatagramChannel.open(); |
||||||
|
open.connect(new InetSocketAddress("localhost",9990)); |
||||||
|
ByteBuffer allocate = ByteBuffer.allocate(64); |
||||||
|
while (true){ |
||||||
|
Thread.sleep(500); |
||||||
|
System.out.println("等待写入"); |
||||||
|
allocate.clear(); |
||||||
|
open.read(allocate); |
||||||
|
allocate.flip(); |
||||||
|
System.out.println(Charset.forName("UTF-8").decode(allocate)); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package com.louzin.niodemo.socketnioclienttest; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.net.InetSocketAddress; |
||||||
|
import java.nio.ByteBuffer; |
||||||
|
import java.nio.channels.SocketChannel; |
||||||
|
|
||||||
|
public class socketClientDemo { |
||||||
|
@Test |
||||||
|
public void createChannel() throws IOException { |
||||||
|
//创建SocketChannel
|
||||||
|
SocketChannel open = SocketChannel |
||||||
|
.open(new InetSocketAddress( |
||||||
|
"www.baidu.com", 80)); |
||||||
|
//第二种方法
|
||||||
|
// SocketChannel open1 = SocketChannel.open();
|
||||||
|
// open1.connect(new InetSocketAddress(
|
||||||
|
// "www.baidu.com", 80));
|
||||||
|
//设置阻塞/非阻塞模式
|
||||||
|
open.configureBlocking(false); |
||||||
|
ByteBuffer allocate = ByteBuffer.allocate(16); |
||||||
|
open.read(allocate); |
||||||
|
open.close(); |
||||||
|
System.out.println("ReadOver"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.louzin.niodemo.socketniotest; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.net.InetSocketAddress; |
||||||
|
import java.nio.ByteBuffer; |
||||||
|
import java.nio.channels.ServerSocketChannel; |
||||||
|
import java.nio.channels.SocketChannel; |
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
|
||||||
|
public class ServerSocketChannelDemo { |
||||||
|
@Test |
||||||
|
public void createPort() throws IOException, InterruptedException { |
||||||
|
int port = 8888; |
||||||
|
ByteBuffer wrap = ByteBuffer.wrap("hello socket".getBytes(StandardCharsets.UTF_8)); |
||||||
|
//ServerSocketChannel
|
||||||
|
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); |
||||||
|
//ServerSocketChannel未实现绑定,所以需要手动绑定
|
||||||
|
//得到socket对象,完成对其绑定
|
||||||
|
serverSocketChannel.socket().bind(new InetSocketAddress(port)); |
||||||
|
//非阻塞模式运行
|
||||||
|
serverSocketChannel.configureBlocking(false); |
||||||
|
//监听是否有新连接传入
|
||||||
|
while (true){ |
||||||
|
//返回值若为null,则无传入
|
||||||
|
//若为阻塞模式,则会卡到这里直到连接建立
|
||||||
|
SocketChannel accept = serverSocketChannel.accept(); |
||||||
|
System.out.println("等待连接!"); |
||||||
|
if(accept==null){ |
||||||
|
System.out.println("未发现新连接!"); |
||||||
|
Thread.sleep(2000); |
||||||
|
}else { |
||||||
|
System.out.println("发现新连接!!"+accept.socket().getRemoteSocketAddress()); |
||||||
|
wrap.rewind();//指针0
|
||||||
|
accept.write(wrap); |
||||||
|
accept.close(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue