我在客户端有一个xml文件有很多行我现在要通过socket将其传到服务端,并在服务端接受之后存储为新的文件。试了很多方法都不成功,求高手指点。越具体越好?

解决方案 »

  1.   

    socket通信就是发送字节流,如果你知道怎么做socket程式,这个传xml就根本不是问题了。把xml转成字符串或是转成bytes流,不就OK啦?
      

  2.   

    这是我自己以前研究的一个socket实例,参考一下吧。
    ---------------------------------------------------------
    java 的socket编程相对来说比较简单,只要建立套节字,然后通过套节字产生输入输出流就行了。以下是一个
    简单实例。
    服务器代码:-----------------------------------------------------------------
    package com.net;import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;public class Server extends Thread {
    private static ServerSocket socket = null;
    private static Socket ss = null; @Override
    public void run() {
    try {
    socket = new ServerSocket(1234);
    while(true)
    {
    System.out.println("-------------");
    ss = socket.accept();
    DataInputStream dis = new DataInputStream(ss.getInputStream());  
    DataOutputStream dos = new DataOutputStream(ss.getOutputStream()); 
    System.out.println("服务器接收到客户端的连接请求:" + dis.readUTF());   
    dos.writeUTF("接受连接请求,连接成功!");
    System.out.println("------------------2");
    if(ss!=null)
    ss.close();
    }
    } catch (IOException e) {
    if(ss!=null)
    try {
    ss.close();
    if(socket!=null)
    socket.close();
    } catch (IOException e1) {
    // TODO 自动生成 catch 块
    e1.printStackTrace();
    }

    e.printStackTrace();
    }
    }
    public static void close()
    {
    if(socket!=null){
    try {
    socket.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

    }注:这里关键在于socket = new ServerSocket(1234);产生一个套接字,用于指定到端口的服务,而ss = socket.accept();
    是在端口上侦听。每次侦听时会等待客户端的连接,如果没有连接就不会执行下面的代码。当有连接时就会执行下面的
    代码,可以对接收到的内容进行处理。事实上我们有时是多次侦听,也就是执行这次后重新侦听。客户端代码:-------------------------------------------------------------------------------------
    Socket socket = null; 
    try {
    socket = new Socket("localhost",1234);
    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());   
                //获取输入流,用于接收服务器端发送来的数据   
                DataInputStream dis = new DataInputStream(socket.getInputStream());   
                //客户端向服务器端发送数据   
                dos.writeUTF("yanhuan!");   
                //打印出从服务器端接收到的数据   
                System.out.println(dis.readUTF());   
                //不需要继续使用此连接时,记得关闭哦   
               socket.close(); 
    } catch (UnknownHostException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    } catch (IOException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }  
      

  3.   

    ss = socket.accept();
    这个应该没问题的,
    但SOCKET ACCEPT客户后,如果"交手"还未完就有新客户接入,
    SOCKET会"冲"的,何谓"冲"的,我想楼主自己试一下就会感受到一般的做发是
    ss=socket.accept();
    Thread t=new Thread(hanshu());
    //这里最好做异步,但不知对楼主会不会复杂点
    hanshu(){
    在这里作一个处理,这样接入的客户就不会冲了,
    }
    //SOCKET的数据可以当文件流“STREAM”来传送,不知楼主
    熟不数流