机缘
因专业相遇:回忆大学岁月,懵懂无知的我和每一位IT学子一样,漫步于CSDN希望找到解决自己问题的idea;
萌生初心:在日复一日的搜索一偏偏文章,下载一份份资源的过程中,心中也萌生了自己写文章的想法。我想:“为什么不自己记录下解决问题的过程,写成文章呢?这样以后自己遗忘的时候,可以来翻翻自己写的文章,这不比网上搜索的结果更贴合自己的真实情况么?”,因此我在CSDN中留下了自己的第一步足迹(基于Socket的多线程通信);
收获
相识:仍记得我初次使用CSDN文章编辑器的状态,是那么的手足无措。如何进行字体编辑,如何放图片,如何设置标题等等。夸张到我进行的每一步都需要单独去搜索它的使用步骤详解才可以进行;显露些许狼狈,却甘之如饴。
相知:慢慢熟悉,渐渐相识,我们像老朋友一般,无话不谈,无事不论。在CSDN我也结识了很多专业领域的朋友,他们有的帮我指正文章中存在的问题,有的认可了我写的篇章,给了我一个点赞加关注,更有甚者给了我默默点了一个收藏。真是欺人太甚,好不气人呀!(哈哈哈哈哈)
日常
化作柴米油盐:转眼毕业已有五年啦,找到了新的工作,认识了新的人,过上了新的生活;唯有CSDN,一切如是。
虽然不能常常写文章记录,但也像老朋友一样,虽十年未见,但如果他坐在对面,我们仍可把酒言欢。
非花不艳丽,选择罢了:随着互联网的发展,形形色色的技术交流网站层出不穷。我却还是喜欢在CSDN上分享我的知识结晶;不是因为其它网站不好,而是我尊重且认同着自己最初的选择。当然,CSDN还是有些毛病哈(文章不给分享其它网站,想要独宠;收费的东西越来越多了,小财迷)。
成就
写得最好的代码…我想了想,应没有最好的代码。我认为每一条路在它最开始的时候,才是最纯真的。所以我把自己在CSDN上写的第一篇文章的代码片段贴出来,与诸君共享。
package x_Socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class x_Server{
/** 声明全局对象,让x_Server的内部类可以共同调用这些对象 **/
static ServerSocket serverSocket = null;//声明静态全局的socket类对象;让x_Server的静态方法可以直接调用该对象;
static Socket socket = null; //声明静态全局的socket类对象;让x_Server的静态方法可以直接调用该对象;
BufferedReader buffSend = null; //信息发送数据流
BufferedReader buffReciever = null; //信息接收数据流
PrintWriter printWriter = null; //数据读写数据流
/** 主函数入口 **/
public static void main(String[] args) throws IOException {
serverSocket = new ServerSocket(5556); //通过Socket的构造函数,监听的5556端口(即等待socket对象向该端口请求连接)
socket = serverSocket.accept(); //如果有socket的对象请求连接了5556端口,则serverSocket的accept返回一个socket对象;
System.out.println("有用户成功连接客户端");
Thread xsend = new Thread(new x_Server().new x_Send()); //通过Thread类的构造函数,创建一个x_Send类的线程对象
Thread xreciver = new Thread(new x_Server().new x_Receiver()); //通过外部类对象去实例化内部类,再通过Thread的构造函数,创建内部类x_Reciever的线程二对象;
xsend.start(); //启动x_Send的线程,让发送与接收数据可以同时进行
xreciver.start(); //启动x_Receiver的线程,让发送与接收数据可以同时进行
}
/** 用于服务端发送信息的x_Send类(线程一) **/
class x_Send extends Thread{
public void run(){ //继承Thread类,必须重写run()方法
try {
buffSend = new BufferedReader(new InputStreamReader(System.in));//获取从控制台输入数据的对象buffSend
printWriter = new PrintWriter(socket.getOutputStream()); //通过PrintWriter类的构造方法,获取向客户端发送信息的输出流对象
String msg = null; //msg:存储服务端发送的信息
do{
msg = buffSend.readLine(); //获得从控制台输入一行的信息
printWriter.println(msg); //将msg传到向服务端发送信息的输出流对象
printWriter.flush(); //刷新输入输出流,客户端端可以立刻收到输入输出流的更新信息
}while(!msg.equals("end")); //客户输入"end"表示结束通信
socket.close(); //关闭端口5556的连接
serverSocket.close(); //不再监听端口5556(即不再接收来自该端口的连接)
} catch (IOException e) {
System.out.println("客户端连接已断开");
e.printStackTrace();
}
}
}
/** 用于服务端接收信息的x_Reciever类(线程二) **/
class x_Receiver extends Thread{
public void run(){ //继承Thread类,必须重写run()方法
try {
buffReciever = new BufferedReader(new InputStreamReader(socket.getInputStream())); //获取从socket输入(客户端传输过来)数据的输入流对象
while(true){
System.out.println("接收客户端消息:"+buffReciever.readLine()); //输出客户端传输过来的信息
}
} catch (IOException e) {
System.out.println("客户端连接已断开:\n");
e.printStackTrace();
}
}
}
}
憧憬
职业规划:更喜欢专业技术性的难题,希望成为专业领域有影响力的人,让行业因为我而有那么一点点不一样。
创作规划:随心而安吧,灵感显,文章出。