很是郁闷,之前做的简单网络聊天系统的传输协议是我自己随便编写的,一看就觉得不规范,更觉得不爽。
对于一个程序员来说应该是追求完美的,我好象也是一个追求完美的人。于是我想到用XML来传输我每次发送的信息。我用程序来创建一个XML文件,然后通过Socket提供的输出流将XML传输出去,传输方法的代码如下。但是在接收的时候却出了问题
java 代码
- public void send(OutputStream os){
- Document doc ;
- Element stus;
- Element stu;
- Element name;
- Element age;
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-
- try {
- DocumentBuilder db = dbf.newDocumentBuilder();
-
- doc = db.newDocument();
-
- stus = doc.createElement("stusn");
-
- stu = doc.createElement("stu");
-
- name = doc.createElement("name");
- name.appendChild(doc.createTextNode(""));
-
- age = doc.createElement("age");
- age.appendChild(doc.createTextNode("25"));
-
- stu.appendChild(name);
- stu.appendChild(age);
-
- stus.setAttribute("nation", "china");
- stus.appendChild(stu);
-
- doc.appendChild(stus);
-
- TransformerFactory tf = TransformerFactory.newInstance();
-
- Transformer ts = tf.newTransformer();
-
- ts.transform(new DOMSource(doc), new StreamResult(os));
-
- } catch (Exception e) {
-
- e.printStackTrace();
- }
- }
-
我在这个方法里传输的参数是一个Socket提供的输出流。然后在服务器端接收这个流对象,并对这个流对象进行解析,代码如下。
java 代码
- ServerSocket ss = new ServerSocket(7777);
- System.out.println("服务器已经启动......");
- Socket so = ss.accept();
-
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-
- DocumentBuilder db = dbf.newDocumentBuilder();
-
- Document doc = db.parse(so.getInputStream());
-
当服务器接收到客户端的Socket以后开始解析doc文档对象。doc文档对象要解析的是从服务器端的Socket获得的输入流,但是我运行服务器端,在运行客户端以后,程序却停在了下面的代码这一行
Document doc = db.parse(so.getInputStream());
真不知道为什么?程序执行到上面一行以后Socket的输入流已经有数据了,为什么还停在这里呢?希望那位迷津啊