《新手干中学》数据流的接收处理及结果转发或显示

一只啃书的老鼠 2013-08-06 12:24:38
最近看到论坛有很多关于数据接收,处理的请教帖子。而前段时间因特殊情况,暂时放下了学习JAVA,现在计划接着学习JAVA。
上一个学习的实验是做一个简单的文本编辑器,这次,我计划利用JAVA实现一个数据的接收,处理实验(串口也可以借鉴,仅仅接收模块使用串口)。
实验实现方面,代码设计方面朋友有好的想法都来说说,相互学习交流下。

数据流程考虑比较常见的情况: 数据单向流动,如果使用串口,我还得给自己电脑找串口去,或者虚拟机,比较不方便,于是采取网络数据实现。

网络数据------>接收模块---->缓存类(里面的数据供数据处理使用)
|---------->数据处理模块-------->后续模块

今天先实现数据源,也就是自己电脑周期给自己发送若干字节数据到指定端口。我使用如下思路实现:
:源数据采用文件读取,也就是从指定文本文件读取行,然后转换成字节数组,打包成UDP数据报文发送。直到文件发送完毕。

搞了三个多小时,网络搜索了好多页面,很多功能模块代码都是借鉴网络上的别人智慧,这里表示感谢,不一一列出。最终组合出了符合自己需求的东东。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.Document;
public class DataSend extends Thread {


//数据源自文件
String fileName = "data.txt";
int LineNumber =0;


private DatagramSocket socket;
private InetAddress address;
private int PORT=50505;
private DatagramPacket packet ;//创建要发送的数据包

//private String buff = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
private int millis = 500;


public DataSend()
{
try{
socket = new DatagramSocket();
address = InetAddress.getLocalHost();
}
catch (SocketException e) {
System.out.println("can not open socket");
e.printStackTrace();
System.exit(1);
} catch (UnknownHostException e) {
System.out.println("Can not find host");
System.exit(1);
}
System.out.println("DataSend start working");
start();//之后调用run()
}


public void run()
{
File file=new File(fileName);
BufferedReader bufferedReader = null;
if(file.isFile() && file.exists())
{
InputStreamReader read = null;
try {
read = new InputStreamReader(
new FileInputStream(file),"gbk");
} catch (UnsupportedEncodingException | FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//考虑到编码格式
bufferedReader = new BufferedReader(read);

String lineTxt = null;

try
{
while((lineTxt = bufferedReader.readLine()) != null)
{
if(lineTxt.length()>0)
{
byte[] data = new byte[lineTxt.length()];
for(int i=0;i<lineTxt.length();i++)
{
data[i] = (byte) lineTxt.charAt(i);
}
packet= new DatagramPacket(data,data.length,address,PORT);
socket.send(packet);
byte[] recData = packet.getData();
StringBuilder str = new StringBuilder();
for(int i=0;i<recData.length;i++)
{
str.append((char)recData[i]);
}
System.out.println("Data Send: "+ str.toString());
Thread.sleep(millis);
}
}

}
catch (Exception e) {
e.printStackTrace();
System.exit(1);//出错退出
}
try {
read.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


}

...全文
85 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我选择把这个代码源文件内容拷贝到一个data.txt中,放到工程目录下(不是bin里面)


运行结果如下:


到底数据有否发出?我本想马上写一个接收的,工程目录都建好了,可惜事件有点晚了,再不睡老婆意见很大
于是,就这样吧,明天晚上下班下个接收的,测试这个数据源是否把数据发送到指定端口。!!
S117 2013-08-06
  • 打赏
  • 举报
回复
楼主好人
  • 打赏
  • 举报
回复
main()
public class program {
	public static void main(String[] args)
	{
		 new DataRec();
	}

}
  • 打赏
  • 举报
回复
针对上述数据源,写了个简单的数据接收程序,测试上述数据源数据是否确实发出。通过测试,发现上述数据源产生的数据的确发送了对应端口。
结果如下:


可以看到,这个数据被接收到,不足的是汉字注释显示不正确,可以跟开发的IDE配置有关,如果将结果写入TXT,或许就没有问题吧。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧