client端
package com.huayang.Bio;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class BioClient {
public static void main(String[] args) {
BufferedReader in = null;
PrintWriter out = null;
Socket socket = null;
try {
socket = new Socket("127.0.0.1", 10001);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = null;
out = new PrintWriter(socket.getOutputStream(), true);
out.println("query time order");
s = in.readLine();
System.out.println("接收到服务端消息:" + s);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
out.close();
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
server端:
package com.huayang.Bio;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class BioServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(10001);
System.out.println("the time server is start in port : 10001");
Socket socket = null;
while (true) {
socket = serverSocket.accept();
new Thread(new ServerHandler(socket)).start();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != serverSocket) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
handler:
package com.huayang.Bio;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Date;
public class ServerHandler implements Runnable {
private Socket socket;
public ServerHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
BufferedReader bufferedReader = null;
PrintWriter out = null;
try {
while (true) {
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
String currentTime = "";
String body = null;
body = bufferedReader.readLine();
if (body == null)
break;
currentTime = "query time order".equalsIgnoreCase(body) ?
new Date(System.currentTimeMillis()).toString() : "bad order";
System.out.println("服务端接收到 query time order 命令 " + currentTime);
out.println(currentTime);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
out.close();
}
if (this.socket != null) {
try {
this.socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
分享到:
相关推荐
Socket是网络编程中的基础组件,它提供了进程间通信(IPC)和网络通信的能力。...通过阅读《Socket 之 BIO、NIO、Netty 简单实现》的博客,你可以了解如何在Java中实现这些通信模型,从而提升网络服务的性能和可靠性。
压缩包中的文件可能包含了实现这三种通信模型的Java代码示例,通过学习和理解这些代码,你可以更好地掌握Java I/O的运用,并根据需求选择合适的模型。建议从简单的BIO开始,逐步过渡到更复杂的NIO和AIO,理解其工作...
虽然没有提供具体的文件名,但我们可以假设这些文件包含了不同类型的BIO编程示例,可能包括服务器端和客户端的实现,可能有Socket通信、文件读写等常见场景。 **BIO编程的知识点** 1. **阻塞I/O模型**: 在BIO模型...
在这个"Java BIO Socke示例"中,我们将探讨如何使用Java BIO API来实现简单的Socket通信,以及如何进一步优化处理多客户端连接,通过线程池来提升效率。 首先,让我们从基础的Socket通信开始。在Java中,`java.net....
以下是基于BIO模式实现的一个简单的Socket服务端与Socket客户端进行通信的逻辑: 1. Socket客户端连接到Socket服务端,并发送数据“I am the client N.”; 2. Socket服务端,监听服务端口,并接收客户端请求数据,...
BIO库的灵活性和可扩展性使得OpenSSL能够轻松地处理各种I/O任务,无论是简单的内存操作,还是复杂的网络加密通信,都可以通过BIO接口高效地实现。对于开发者来说,理解并熟练使用BIO是深入掌握OpenSSL的关键。
在Netty中,BIO和NIO的源码分析可以帮助我们深入了解底层的I/O机制,理解如何通过Java API实现高效的网络通信。学习这些源码不仅可以提高我们的编程能力,还能让我们在设计和优化网络服务时做出更明智的决策。
【网络通信:Netty、BIO、NIO与AIO详解】 在计算机科学中,网络通信是实现系统间数据交换的关键技术。Java平台提供了多种I/O模型来支持网络通信,包括传统的阻塞I/O(BIO)、非阻塞I/O(NIO)以及异步I/O(AIO)。...
在某些应用场景下,如果DSP上存在空闲的通用I/O引脚,可以通过这些引脚来构建一个简单的串行通信接口。例如,在本案例中,作者使用了C25 DSP上的BIO和XF两个引脚,其中XF作为输出数据线,BIO作为输入数据线。通过...
1. 单线程Reactor:所有事件都在一个线程中处理,简单但可能成为性能瓶颈。 2. 多线程Reactor:分为事件注册和事件处理两个线程池,提高了处理效率,但增加了复杂性。 3. 主从Reactor:主Reactor负责事件注册,从...
本主题将深入探讨如何使用Java的非阻塞I/O(Non-blocking Input/Output,NIO)包来实现一个简单的异步通信核心,重点关注NIO中的通道(Channel)、通道选择器(Selector)和选择器键(Selector Key)。 1. **Java ...
本项目利用NIO实现了一个简单的非阻塞socket通信的聊天工具,使得在高并发环境下,服务器能够同时处理多个客户端连接,提高系统性能。 1. **非阻塞I/O**: 在BIO模型中,读写操作是阻塞的,即当没有数据可读或无法...
Java BIO( Blocking I/O)是一种同步阻塞式的 I/O 模式,即服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理。如果这个连接不做任何事情会造成不必要的线程开销。这种...
本项目"基于nio的简易聊天室"旨在通过NIO技术实现一个简单的聊天室服务端和客户端,其特点是有图形用户界面(GUI)供用户交互。 NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。在这...
Java Socket编程是网络通信的核心部分,它提供了进程间通信(IPC)的能力,使得运行在不同设备上的应用程序可以通过网络...在压缩包中的"Socket"文件可能包含了具体的BIO和NIO的Java实现示例,可以进一步学习和研究。
- **BIO**:适用于简单的服务器,如早期的Tomcat服务器,以及需要低延迟、高响应的单线程或少量连接的应用。 - **NIO**:常用于需要处理大量并发连接的服务器,如高并发的Web服务器、聊天服务器等。 - **AIO**:适合...
- **编程难度**:BIO 的编程相对简单,NIO 和 AIO 的编程较为复杂。 #### 8. Java IO 流的分类 - **按读写单位**: - 字符流:以字符为单位进行读写。 - 字节流:以字节为单位进行读写。 - **按实际IO操作**: ...
在本篇讨论中,我们将深入探讨Java Socket BIO的源码实现,特别是在处理多客户端连接和有回包的情况。 首先,我们需要了解Socket的基本概念。Socket是网络通信中的一个端点,它提供了进程间通信的能力,使得两个...
在Netty中,使用NIO或AIO实现的TCP连接,可以结合其线程模型,如EventLoopGroup(事件循环组)和ChannelHandler(通道处理器)等组件,实现高效、可扩展的网络通信。例如,BossGroup处理新的连接请求,WorkerGroup...
在这个“JAVA实现简单RPC框架”的项目中,我们将探讨如何利用Java的核心特性来构建这样的框架。以下是关键知识点的详细说明: 1. **JDK动态代理**: JDK动态代理是Java提供的一种机制,可以在运行时创建一个实现了...