如何用UDP编程去接受并解析UDP端口上接受到的以下数据: 消息格式(接口事例) 如下: <?xml version="1.0" encoding="utf-8" ?>
<!--短信发送-->
<MainMsg>
<MsgType>DXJR01</MsgType>
<MsgSender>192.168.0.1:8888</MsgSender>
<MsgReceiver>192.168.0.2:8888</MsgReceiver>
<MsgContent>
<DXUUID>UUID</DXUUID>
<SJHMLB>
<!--一次可以包含多个手机号码,短信群发-->
<SJHM>手机号码1</SJHM>
<SJHM>手机号码2</SJHM>
</SJHMLB>
<DXNR>短信内容</DXNR>
<!--短信内容有长度限制:长度限制在1k字节以内,即500汉字,具体短信拆分后发送由短信接入系统实现-->
<JGDM>发送机构代码</JGDM>
<XTDM>发送系统代码</XTDM>
<YXJ>短信优先级</YXJ>
</MsgContent>
</MainMsg>接收到的是一个何类型的格式?如何解析成xml文档?请高手们用简单代码提醒下~
<!--短信发送-->
<MainMsg>
<MsgType>DXJR01</MsgType>
<MsgSender>192.168.0.1:8888</MsgSender>
<MsgReceiver>192.168.0.2:8888</MsgReceiver>
<MsgContent>
<DXUUID>UUID</DXUUID>
<SJHMLB>
<!--一次可以包含多个手机号码,短信群发-->
<SJHM>手机号码1</SJHM>
<SJHM>手机号码2</SJHM>
</SJHMLB>
<DXNR>短信内容</DXNR>
<!--短信内容有长度限制:长度限制在1k字节以内,即500汉字,具体短信拆分后发送由短信接入系统实现-->
<JGDM>发送机构代码</JGDM>
<XTDM>发送系统代码</XTDM>
<YXJ>短信优先级</YXJ>
</MsgContent>
</MainMsg>接收到的是一个何类型的格式?如何解析成xml文档?请高手们用简单代码提醒下~
import org.jdom.input.SAXBuilder;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;import java.io.StringReader;
import java.io.IOException;
import java.io.File;
import java.util.List;/**
* Created by IntelliJ IDEA.
* User: admin
* Date: 2011-9-1
* Time: 9:05:04
* To change this template use File | Settings | File Templates.
*/
public class CSDNDemo2 {
String content= "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" +
"<!--短信发送-->\n" +
"<MainMsg>\n" +
" <MsgType>DXJR01</MsgType>\n" +
" <MsgSender>192.168.0.1:8888</MsgSender>\n" +
" <MsgReceiver>192.168.0.2:8888</MsgReceiver>\n" +
" <MsgContent>\n" +
" <DXUUID>UUID</DXUUID>\n" +
"<SJHMLB>\n" +
"<!--一次可以包含多个手机号码,短信群发-->\n" +
"<SJHM>手机号码1</SJHM>\n" +
"<SJHM>手机号码2</SJHM>\n" +
" </SJHMLB>\n" +
" <DXNR>短信内容</DXNR>\n" +
" <!--短信内容有长度限制:长度限制在1k字节以内,即500汉字,具体短信拆分后发送由短信接入系统实现-->\n" +
" <JGDM>发送机构代码</JGDM>\n" +
" <XTDM>发送系统代码</XTDM>\n" +
" <YXJ>短信优先级</YXJ>\n" +
" </MsgContent>\n" +
"</MainMsg>"; /**
* 如果数据源是xml文件
* @param file
*/
public void readUDPData(File file) {
System.out.println(file.getAbsolutePath());
// StringReader read = new StringReader(xmlStr);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
// InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
try {
// 通过输入源构造一个Document
Document doc = sb.build(file);
// 取的根元素
Element root = doc.getRootElement(); Element type=root.getChild("MsgType");
System.out.println("类型:"+type.getText());
Element sender=root.getChild("MsgSender");
System.out.println("发送者"+sender.getText());
Element receiver=root.getChild("MsgReceiver");
System.out.println("接受者"+receiver.getText());
Element content= root.getChild("MsgContent");
System.out.println("内容"+content.getText()); Element DXUUID=content.getChild("DXUUID");
System.out.println("DXUUID:"+DXUUID.getText());
Element SJHMLB=content.getChild("SJHMLB"); List<Element> SJHMList=SJHMLB.getChildren("SJHM");
for(Element e:SJHMList){
System.out.println("手机号码:"+e.getText());
}
Element DXNR=content.getChild("DXNR");
System.out.println("DXNR:"+DXNR.getText());
Element JGDM=content.getChild("JGDM");
System.out.println("JGDM:"+JGDM.getText());
Element XTDM=content.getChild("XTDM");
System.out.println("XTDM:"+XTDM.getText());
Element YXJ=content.getChild("YXJ");
System.out.println("YXJ:"+YXJ.getText()); } catch (JDOMException e) {
e.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} } public void readUDPData(String xmlStr) {
System.out.println(xmlStr);
StringReader read = new StringReader(xmlStr);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
try {
// 通过输入源构造一个Document
Document doc = sb.build(source);
// 取的根元素
Element root = doc.getRootElement();
Element type=root.getChild("MsgType");
System.out.println("类型:"+type.getText());
Element sender=root.getChild("MsgSender");
System.out.println("发送者"+sender.getText());
Element receiver=root.getChild("MsgReceiver");
System.out.println("接受者"+receiver.getText());
Element content= root.getChild("MsgContent");
System.out.println("内容"+content.getText()); Element DXUUID=content.getChild("DXUUID");
System.out.println("DXUUID:"+DXUUID.getText());
Element SJHMLB=content.getChild("SJHMLB"); List<Element> SJHMList=SJHMLB.getChildren("SJHM");
for(Element e:SJHMList){
System.out.println("手机号码:"+e.getText());
} Element DXNR=content.getChild("DXNR");
System.out.println("DXNR:"+DXNR.getText());
Element JGDM=content.getChild("JGDM");
System.out.println("JGDM:"+JGDM.getText());
Element XTDM=content.getChild("XTDM");
System.out.println("XTDM:"+XTDM.getText());
Element YXJ=content.getChild("YXJ");
System.out.println("YXJ:"+YXJ.getText()); } catch (JDOMException e) {
e.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
// return "OK";
} public static void main(String[] args){
File demo1=new File("resources\\xml\\demo2.xml");
CSDNDemo2 reader=new CSDNDemo2();
// reader.readUDPData(demo1);
reader.readUDPData(reader.content);
}
}
{
try{
//创建数据报套接字,并绑定到固定端口。
DatagramSocket ds = new DatagramSocket(6000);
byte[] buf = new byte[8000]; //声明byte数组,用于接收客户端Client输入
//创建接收数据的UDP包 new DatagramPacket(byte[],length);
DatagramPacket dp = new DatagramPacket(buf,8000);
ds.receive(dp); //服务器端Server读取客户端Client的数据,并将数据保存到UDP包对象中
ds.close();
return new String(buf,0,dp.getLength());
}
catch(Exception e){
e.printStackTrace();
return null;
}
LS的xml解析代码LZ可以参考,LZ的另一贴也有人回复了如何接收数据了