本帖最后由 HK仅輝 于 2022-9-20 17:19 编辑
学习Netty,需要了解一些基础知识
1、I/O
输入流:InputStream和Reader
输出流:OutputStream和Writer
字节流 字符流
计算机最小的二进制单位 bit 比特 代表0和1字节 1 byte = 8bit
计算机处理的最小单位字符 1 char = 2byte = 16bit
所以,字节流处理文件、图片、视频等二进制数据,而字符流处理文本数据。
2、Socket
在计算机领域中,翻译为“套接字”。本质上,是计算机之间进行通信的一种方式。
OSI七层模型 = Open System Interconnection 开放式系统互联从下到上分别为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
实际应用的是优化后的TCP/IP模型(四层): 网络接口层/链路层、网络层、传输层、应用层
Socket是应用层与传输层之间的抽象层,是一组接口。
Server
[Java] 纯文本查看 复制代码 public static void main(String[] args) throws IOException {
//线程池
ExecutorService threadPool = Executors.newCachedThreadPool();
//端口
ServerSocket serverSocket = new ServerSocket(8888);
//轮询是否有连接
while (true){
//等待连接, 阻塞方式
Socket socket = serverSocket.accept();
threadPool.execute(new Runnable() {
@Override
public void run() {
handler(socket);
}
});
}
}
private static void handler(Socket socket) {
System.out.println(Thread.currentThread().getId());
System.out.println(Thread.currentThread().getName());
byte[] bytes = new byte[1024];
InputStream is = null;
try {
is = socket.getInputStream();
while (true) {
int read = is.read(bytes) ;
if (read == -1) break;
System.out.println(new String(bytes,0,read));
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Client
[Java] 纯文本查看 复制代码 public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1",8888);
OutputStream os = socket.getOutputStream();
String message = "我是11111";
os.write(message.getBytes());
os.close();
socket.close();
}
|