从Java BIO 到 Netty (二) ---Java BIO 示例

File I/O

	/**
	 * try-with-resource since JDK7
	 * 此处try()中的类只要实现AutoCloseable接口,就可以保证程序执行后会自动释放资源,不需要在finally中释放.
	 */
	public static void main(String[] args) {
		try (
				InputStreamReader inputStreamReader = new FileReader("C:\\Users\\Q\\Desktop\\log.log");
				BufferedReader bufferedReader = new BufferedReader(inputStreamReader)
		) {
			String line;
			while ((line = bufferedReader.readLine()) != null) {
				System.out.println(line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

TCP-Socket

服务端

public class JavaTcpServerBIODemo {

	private static AtomicInteger atomicInteger = new AtomicInteger();

	public static void main(String[] args) throws Exception {
		ServerSocket serverSocket = new ServerSocket();
		serverSocket.bind(new InetSocketAddress(2345));
		// 此处使用多线程处理多个链接,每个新链接分配一个新的线程处理
		while (true) {
			System.out.println("connet watting......");
			Socket socket = serverSocket.accept();
			atomicInteger.incrementAndGet();
			System.out.println("新客户端连接...");
			((Runnable) () -> {
				InputStream inputStream = null;
				OutputStream outputStream = null;
				BufferedReader bufferedReader = null;
				try {
					// 输入
					inputStream = socket.getInputStream();
					outputStream = socket.getOutputStream();
					bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
					String msg;
					while ((msg = bufferedReader.readLine()) != null) {
						System.out.println(msg);
					}
					socket.shutdownInput();
					// 输出
					outputStream.write(("welcome..." + atomicInteger.get()).getBytes(StandardCharsets.UTF_8));
				} catch (Exception e) {
					e.printStackTrace();
				} finally {
					if (bufferedReader != null) {
						try {
							bufferedReader.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
					if (outputStream != null) {
						try {
							outputStream.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
					if (inputStream != null) {
						try {
							inputStream.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}
			}).run();
		}
	}
}

客户端

public class JavaTcpClientBIODemo {

	public static void main(String[] args) {
		try (
				Socket socket = new Socket("127.0.0.1", 2345);
				InputStream inputStream = socket.getInputStream();
				OutputStream outputStream = socket.getOutputStream();
				BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))
		) {
			// 输出
			outputStream.write("你好,我是客户端".getBytes(StandardCharsets.UTF_8));
			socket.shutdownOutput();
			// 输入
			String msg;
			while ((msg = bufferedReader.readLine()) != null) {
				System.out.println(msg);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

UDP-Socket

服务端

public class UDPServerDemo {

	public static void main(String[] args) throws Exception {
		// 发送数据
		DatagramSocket datagramSocket = new DatagramSocket(9999);
		String msg = "hello";
		DatagramPacket datagramPacket = new DatagramPacket(
				msg.getBytes(),
				msg.length(),
				InetAddress.getLocalHost(),
				8888);
		datagramSocket.send(datagramPacket);
	}
}

客户端

public class UDPClientDemo {

	public static void main(String[] args) throws Exception {
		// 接收数据
		DatagramSocket datagramSocket = new DatagramSocket(8888);
		byte[] bytes = new byte[1024];
		DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
		// block
		datagramSocket.receive(datagramPacket);
		// msg
		System.out.println(new String(datagramPacket.getData(), 0, datagramPacket.getData().length));
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值