何为网络通信?看起很高深的词汇解释起来往往就是简单的让人难以置信,没错,网络通信就是通过网络协议来实现计算机之间的信息交互。当然,这只算得上是我个人的理解。
而我们知道,如果我们想要向某一台机器通信时,我们需要首先需要确定我们自己的机器与目标机器是否连上了同一台服务器,然后在向服务器发送要发送的信息,而服务器则将从机器上读来的消息发送到你想要发送到的指定机器。
那么这些东西体现到代码上时,创建一个服务器与客户端,然后客户端通过匹配ip地址与端口连接上服务器,再根据自己写的协议就可以发送信息以及很多有趣的功能。
那么服务器与客户端的实现也非常简单,就那么简单的几行代码
ServerSocket server = new ServerSocket(port);
System.out.println("服务器创建成功");
Socket client = new Socket(ip,port);
那么在创建完成之后呢,怎么实现服务器与客户机之间的交互呢,这就要靠我们以前所学过的输入输出流了
//得到输入输出流对象
InputStream ins = client.getInputStream();
OutputStream out = client.getOutputStream();
再然后就是自己写传输文本信息的协议了,以下代码在附上自己写的传输文件的协议
int totalLen = dins.readInt();
System.out.println("-----进入一条消息长度为:"+totalLen);
//2、读取消息类型标识,只读取一个字节
byte flag = dins.readByte();
System.out.println("消息接收类型为:"+flag);
//3、读取目标客户号码,一个int
int destNum = dins.readInt();
System.out.println("消息接受目标用户号是:"+destNum);
if(flag == 1){
byte[] data = new byte[totalLen-4-1-4];
//从流中读取data.length个字节放入数组中
dins.readFully(data);
String msg = new String(data);//将字节数组转换成字符串
System.out.println("发送文本给:"+destNum+" 内容是:"+msg);
}else if(flag == 2){
System.out.println("发送文件给:"+destNum);
byte[] data = new byte[256];
dins.readFully(data);//读取256个字节作为标题
//解析文件名字并去除空格
String fileName = new String(data).trim();
System.out.println("读到的文件名为:"+fileName);
//余下的字节就是文件内容
data = new byte[totalLen-4-1-4-256];
dins.readFully(data);//读入文件字节
//保存文件到当前目录下
FileOutputStream fous = new FileOutputStream(fileName);
fous.write(data);
fous.flush();
fous.close();
System.out.println("文件保存完毕");
不过在将文件传输等功能写入客户端界面时,发现了一点有趣的事情就是,如果使用BufferedReader.read()可能会导致乱码···但是使用BufferedReader.readLine()貌似就不会,目前为止还没想到什么合理的解释··
通信这块也算是刚刚才开始起步吧,不过咱认真起来还是可以做好很多事情的~加油