最近看到论坛有很多关于数据接收,处理的请教帖子。而前段时间因特殊情况,暂时放下了学习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();
}
}

}


}    新手学习JAVA网络数据接收多线程

解决方案 »

  1.   

    我选择把这个代码源文件内容拷贝到一个data.txt中,放到工程目录下(不是bin里面)
    运行结果如下:
    到底数据有否发出?我本想马上写一个接收的,工程目录都建好了,可惜事件有点晚了,再不睡老婆意见很大
    于是,就这样吧,明天晚上下班下个接收的,测试这个数据源是否把数据发送到指定端口。!!
      

  2.   

    针对上述数据源,写了个简单的数据接收程序,测试上述数据源数据是否确实发出。通过测试,发现上述数据源产生的数据的确发送了对应端口。
    结果如下:
    可以看到,这个数据被接收到,不足的是汉字注释显示不正确,可以跟开发的IDE配置有关,如果将结果写入TXT,或许就没有问题吧。
      

  3.   

    main()public class program {
    public static void main(String[] args)
    {
     new DataRec();
    }}