尾声
一转眼时间真的过的飞快。我们各奔东西,也各自踏上了自己的旅途,但是即使多年不见,也因为这份情谊我们依旧如从前那般“亲密”。不忘初心方得始终。加油吧,程序员们,在我看来35岁,40岁从来不是危机,只要永远不要忘记自己为何踏上征程!
为了让更多在学习中或者最近要准备面试的朋友们看到这篇文章,希望你们能多多评论,点赞+转发!
再次感谢所有给我提供过题目的朋友们,感谢一路有你!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
检测域名的连通性结果图
检测IP的连通性结果图
####二.Socket通信
计算机网络有一个大名鼎鼎的TCP/IP协议,TCP/IP是一个协议组,分为3个层次:
-
网络层:包括IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
-
传输层:包括TCP协议和UDP协议。
-
应用层:包括HTTP、FTP、TELNET、SMTP、DNS等协议
Socket属于传输层的技术, API实现TCP协议后即可用于HTTP通信,实现UDP协议后即可用于FTP通信,当然也可以直接在底层进行点对点通信。
Android的Socket编程主要使用Socket和ServerSocket两个类:
1.Scoket
Socket是最常用的工具,客户端和服务端都要用到,描述了两边对套接字(Socket)处理的一般行为。主要方法如下:
-
connect:连接指定IP和端口。该方法用于客户端连接服务端。
-
getInputStream:获取输入流,即自身收到对方发过来的数据。
-
getOutputStream:获取输入流,即自身向对方发送的数据。
-
getInetAddress:获取网络地址对象。
-
isConnected:判断socket是否连上。
-
isClosed:判断socket是否关闭。
-
close:关闭socket。
2.ServerSocket
ServerSocket仅用于服务端,在运行时不停地侦听指定端口。主要方法如下:
-
构造函数:指定侦听哪个端口。
-
accept:开始接收客户端的连接。有客户端连上时就返回一个Socket对象,若要持续侦听连接,则在循环语句中调用该函数。
-
getInetAddress:获取网络地址对象。
-
isClosed:判断socket服务器是否关闭。
-
close:关闭socket服务器。
####3.Scoket通信案例
举个Socket通信的案例,详细步骤说明如下:
(1)首先在客户端与服务端之间建立Socket连接。
(2)然后在Activity中启动Socket连接的线程,等待界面向Socket服务器发送消息,并准备接收消息。
(3)最后启动Socket服务器(其实一开始就要启动,这样App运行时才能马上连上后端服务器)。
下面是在客户端与服务端之间建立Socket连接的详细代码:
public class MessageTransmit implements Runnable {
// 以下为Socket服务器的ip和端口,根据实际情况修改
private static final String SOCKET_IP = “192.168.0.212”;
private static final int SOCKET_PORT = 51000;
private BufferedReader mReader = null; // 声明一个缓存读取器对象
private OutputStream mWriter = null; // 声明一个输出流对象
@Override
public void run() {
// 创建一个套接字对象
Socket socket = new Socket();
try {
// 命令套接字连接指定地址的指定端口
socket.connect(new InetSocketAddress(SOCKET_IP, SOCKET_PORT), 3000);
// 根据套接字的输入流,构建缓存读取器
mReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 获得套接字的输出流
mWriter = socket.getOutputStream();
// 启动一条子线程来读取服务器的返回数据
new RecvThread().start();
// 为当前线程初始化消息队列
Looper.prepare();
// 让线程的消息队列开始运行,之后就可以接收消息了
Looper.loop();
} catch (Exception e) {
e.printStackTrace();
}
}
// 创建一个发送处理器对象,让App向后台服务器发送消息
public Handler mSendHandler = new Handler() {
// 在收到消息时触发
public void handleMessage(Message msg) {
// 换行符相当于回车键,表示我写好了发出去吧
String send_msg = msg.obj.toString() + “\n”;
try {
// 往输出流对象中写入数据
mWriter.write(send_msg.getBytes(“utf8”));
} catch (Exception e) {
e.printStackTrace();
}
}
};
// 定义消息接收子线程,让App从后台服务器接收消息
private class RecvThread extends Thread {
@Override
public void run() {
try {
String content;
// 读取到来自服务器的数据
while ((content = mReader.readLine()) != null) {
// 获得一个默认的消息对象
Message msg = Message.obtain();
msg.obj = content; // 消息描述
// 通知SocketActivity收到消息
SocketActivity.mHandler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
下面是等待界面向Socket服务器发送消息,并准备接收消息的页面代码:
public class SocketActivity extends AppCompatActivity implements OnClickListener {
private EditText et_socket;
private static TextView tv_socket;
private MessageTransmit mTransmit; // 声明一个消息传输对象
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_socket);
et_socket = findViewById(R.id.et_socket);
tv_socket = findViewById(R.id.tv_socket);
findViewById(R.id.btn_socket).setOnClickListener(this);
mTransmit = new MessageTransmit(); // 创建一个消息传输
new Thread(mTransmit).start(); // 启动消息传输线程
}
public void onClick(View v) {
if (v.getId() == R.id.btn_socket) {
// 获得一个默认的消息对象
Message msg = Message.obtain();
msg.obj = et_socket.getText().toString(); // 消息内容
// 通过消息线程的发送处理器,向后端发送消息
mTransmit.mSendHandler.sendMessage(msg);
}
}
结尾
最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
高级UI,自定义View
UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。
不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
就能随便找到不错的工作了。
不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
[外链图片转存中…(img-CZ2EQPUy-1715804919291)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!