资料:慕课网

  第二章:手动搭建I/O网络通信框架2:BIO编程模型实现群聊

  第三章:手动搭建I/O网络通信框架3:NIO编程模型,升级改造聊天室

  第四章:手动搭建I/O网络通信框架4:AIO编程模型,聊天室终极改造

  这个基础项目会作为BIO、NIO、AIO的一个前提,后面会有数篇博客会基于这个小项目利用BIO、NIO、AIO进行改造升级。

  简单的说一下io,了解的直接跳过看代码吧:IO常见的使用场景就是网络通信或读取文件等方面。IO流分为字节流和字符流。字节即Byte,包含八位二进制数,一个二进制数就是1bit,中文名称叫位。字符即一个字母或者一个汉字。一个字母由一个字节组成,而汉字根据编码不同由2个或者3个组成。Java.io包如下:详细的API可自行查阅资料

  

  Socket定义:套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

  可以理解为两台机器或进程间进行网络通信的端点,这个端点包含IP地址和端口号。

  Socket和ServerSocket区别就如其名字一样,简单地说ServerSocket作用在服务端,用以监听客户端的请求。Socket作用在客户端和服务端,用以发送接收消息。但是就像上面说的,它们都要包含一个IP地址和端口号。

  Socket和ServerSocket实战:

  首先创建一个最普通的Java项目。然后创建两个类,Server和Client。其代码和注释如下,仔细看下注释和代码,还是比较简单的

  服务器只能为一个客户端服务,一旦监听到客户端的请求,就会一直被这个客户端占用。

public class Client {
public static void main(String[] args) {
//这是服务端的IP和端口
final String DEFAULT_SERVER_HOST = "127.0.0.1";
final int DEFAULT_SERVER_PORT = 8888;
//创建Socket
try (Socket socket = new Socket(DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT)) {
//接收消息
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
//发送消息
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())
);
//获取用户输入的消息
BufferedReader userReader = new BufferedReader(
new InputStreamReader(System.in)
);
String msg = null;
//循环的话客户端就可以一直输入消息,不然执行完try catch会自动释放资源,也就是断开连接
while (true) {
String input = userReader.readLine();
//写入客户端要发送的消息。因为服务端用readLine获取消息,其以\n为终点,所以要在消息最后加上\n
writer.write(input + "\n");
writer.flush();
msg = reader.readLine();
System.out.println(msg);
//如果客户端输入quit就可以跳出循环、断开连接了
if(input.equals("quit")){
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

  

public class Server {
public static void main(String[] args) {
final int DEFAULT_PORT = 8888;
//创建ServerSocket监听8888端口
try (ServerSocket serverSocket = new ServerSocket(DEFAULT_PORT)) {
System.out.println("ServerSocket Start,The Port is:" + DEFAULT_PORT);
while (true) {//不停地监听该端口
//阻塞式的监听,如果没有客户端请求就一直停留在这里
Socket socket = serverSocket.accept();
System.out.println("Client[" + socket.getPort() + "]Online");
//接收消息
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
//发送消息
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())
); String msg = null;
while ((msg = reader.readLine()) != null) {
System.out.println("Client[" + socket.getPort() + "]:" + msg);
//写入服务端要发送的消息
writer.write("Server:" + msg + "\n");
writer.flush();
//如果客户端的消息是quit代表他退出了,并跳出循环,不用再接收他的消息了。如果客户端再次连接就会重新上线
if (msg.equals("quit")) {
System.out.println("Client[" + socket.getPort() + "]:Offline");
break;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

  然后打开两个命令终端,通过javac编译后,一个运行Server代表服务器,一个运行Client代表客户端。

下一篇:基于BIO进行升级改造,打造群聊聊天室。

手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊的更多相关文章

  1. 手动搭建I/O网络通信框架2:Socket和ServerSocket入门实战,实现单聊

    第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 在第一章中运用Socket和ServerSocket简单的实现了网络通信.这一章,利用BIO编程模型进行 ...

  2. 手动搭建I/O网络通信框架3:NIO编程模型,升级改造聊天室

    第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 第二章:手动搭建I/O网络通信框架2:BIO编程模型实现群聊 在第二章中用BIO编程模型,简单的实现了一 ...

  3. 手动搭建I/O网络通信框架4:AIO编程模型,聊天室终极改造

    第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 第二章:手动搭建I/O网络通信框架2:BIO编程模型实现群聊 第三章:手动搭建I/O网络通信框架3:NI ...

  4. SSM框架手动搭建

    SSM框架手动搭建 创建web项目 IDEA创建Maven项目 [File]-->[new]-->[project..] 将项目变为web项目 [File]-->[Project S ...

  5. ASP.NET Web API 2系列(一):初识Web API及手动搭建基本框架

    1.导言 随着Web技术的发展,现在各种框架,前端的,后端的,数不胜数.全栈工程师的压力越来越大. PC端,pad端,移动端App(安卓/IOS)的发展,使得前后端一体的开发模式十分笨重.因此,前后端 ...

  6. 手动搭建简易web框架与django框架简介

    目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...

  7. vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)

    前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...

  8. 手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践

      本文主要讲解了如何把ABP官方的在线生成解决方案运行起来,并说明了解决方案中项目间的依赖关系.然后手动实践了如何从0搭建了一个简化的解决方案.ABP官方的在线生成解决方案源码下载参考[3],手动搭 ...

  9. 混合式app ionic2.x 手动搭建开发环境教程分享(nodejs,jdk,ant,androidsdk)

    1.ionic简介 为什么选用ionic: 彻底开源且免费 性能优异 基于红的发紫的AngularJs 漂亮的UI 强大的命令行(基于更热门的nodejs) 开发团队非常活跃 ngCordova,将主 ...

随机推荐

  1. Linux定制化RPM包

    定制化RPM包 1.Linux安装软件方法 1- rpm/yum安装 简单.速度快,但是不能定制安装 RPM RedHat Package Manager(RPM软件包管理器) 2- 二进制安装 解压 ...

  2. Vue2.0 【第一季】第6节 v-model指令

    目录 Vue2.0 [第一季] 第6节 v-model指令 第6节 v-model指令 一.一个最简单的双向数据绑定代码: 二.修饰符 三.文本区域加入数据绑定 四.多选按钮绑定一个值 五.多选绑定一 ...

  3. ClassLoader&双亲委派&类初始化过程

    1.class sycle 类加载的生命周期:加载(Loading)–>验证(Verification)–>准备(Preparation)–>解析(Resolution)–>初 ...

  4. OPENGL图形渲染管线图解

    OPENGL固定图形渲染管线可以粗略地认为由下面的阶段衔接而成: 顶点颜色,光照,材质三个输入在光栅化前控制绘制管线的操作.光照和材质不能单独使用.顶点颜色,光源颜色,材质颜色都有alpha值,它们的 ...

  5. computed 里面 不能写箭头函数 都要写 function () {} 否则页面会都不显示

    computed 里面 不能写箭头函数 都要写 function () {} 否则页面会都不显示

  6. 学习Docker的记录

    一.下载Docker for Windows  与  安装教程 参考文档一步一步的来学习  文档1  文档2 二.Docker的常用命令介绍 docker run  -it  --rm   -p 80 ...

  7. java-方法。(新手)

    import java.util.ArrayList; //导入包.import java.util.Iterator;import java.util.LinkedList;import java. ...

  8. Vysor Pro1.9.3破解,连接 USB 数据线在电脑上远程控制 Android 手机平板/同步显示画面

    Vysor PRO 破解方法 1.下载Vysor Pro,   Vysor Pro下载地址 ,chrome版需要挂梯子. 下载后,能连接,但是清晰度太低,能使用的功能也很少,下面我们就开始来破解它. ...

  9. JavaScript和JSCript的标准ECMAScript

    相信很多人都听过JavaScript(简称JS),甚至学过JavaScript.但是却没听过ECMAScript(简称:EC). ECMAScript其实是JavaScript的标准,也就是JavaS ...

  10. JavaScript(8)--- 闭包

    JavaScript(8)--- 闭包 理解闭包 我的理解是:闭包就是能够读取其他函数内部变量的函数.由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以简单这样理解 &q ...