(JAVASE)CSFrameWork详解(communication层及笼统概述)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了(JAVASE)CSFrameWork详解(communication层及笼统概述),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2898字,纯文字阅读大概需要5分钟。
内容图文
首先先引入一个配置文件
public interface INetConfig {
String ip = "127.0.0.1";
int port = 54123;
default void close(InputStream is, OutputStream os, Socket socket) {
if (null != is) {
try {
is.close();
} catch (IOException e) {
} finally {
is = null;
}
}
if (null != os) {
try {
os.close();
} catch (IOException e) {
} finally {
os = null;
}
}
if (null != socket && !socket.isClosed()) {
try {
socket.close();
} catch (IOException e) {
} finally {
socket = null;
}
}
}
}
其中包含ip,端口及一个经常使用的close方法用于关闭通信信道。
作为框架最底层,其应该只包含最基本的操作,如信息在通道间的往来,通道的关闭。其具体得到信息的处理操作不应由底层实现,先用抽象方法来留给上层实现。
对于CSFrameWork来说,总共分为五个大块,client、clientConversation、server、serverConversation、communication.
而其中每个客户有一套(client、clientConversation、communication)
每个客户端有一套(server、serverConversation、communication)
而实际用于通信时,由上层client→clientConversation→communication(客户端)→communication(服务端)serverConversation→server
可以看出每当建立一个通信,需要两个communication完成客户端与服务端的信息传递。
首先底层包括
protected Socket socket;
protected DataInputStream dis;
protected DataOutputStream dos;
protected boolean running;
protected boolean listening;
其中两个Boolean一个running表示是否正在运行,listening表示是否处在监听的状态。
其中socket可以看做为信息交互的主战场(信息入口、出口)这点由构造方法可以看出:
构造:
public Communication(Socket socket) throws IOException {
this.socket = socket;
this.dis = new DataInputStream(socket.getInputStream());
this.dos = new DataOutputStream(socket.getOutputStream());
this.running = true;
this.listening = false;
new Thread(this).start();
}
数据输入输出流都是从各自的socket中取出,在实例化communication时,当前对象就已经开始运行了,但是并不处于监听状态。
基于之前的线程编程基础结合CSFrameWork,无论客户端还是服务端,底层都是communication,所以从communication建立开始就应该单独线程控制。
信息发送:
public void send(NetMessage message) {
try {
this.dos.writeUTF(message.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
通过dos发送数据。
信息接受:
@Override
public void run() {
String message;
this.listening = true;
while (running) {
try {
message = this.dis.readUTF();
dealNetMessage(new NetMessage(message));
} catch (IOException e) {
if (running) {
running = false;
dealAbnormalDrop();
}
}
}
}
与信息发送不同,信息接受是一个被动状态,我们需要在信息传达过来时候及时接收到。当开始进入准备接收信息状态时,才是进入了监听状态。
未完成:
public abstract void dealNetMessage(NetMessage netMessage);
public abstract void dealAbnormalDrop();
两个抽象方法,这两个方法并不是底层就该实现的,就算想实现,在底层也没有办法遇见上层会做什么具体操作。
以及客户端对应服务端异常掉线、服务端对应客户端异常掉线操作都是各不相同的。
关闭:
protected void close() {
this.running = false;
this.listening = false;
close(this.dis, this.dos, this.socket);
}
首先将监听状态退出,运行结束,调用close方法来关闭信息通道。
内容总结
以上是互联网集市为您收集整理的(JAVASE)CSFrameWork详解(communication层及笼统概述)全部内容,希望文章能够帮你解决(JAVASE)CSFrameWork详解(communication层及笼统概述)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。