readline只有在遇到回车,换行才有返回的
偶肯定你发送的数据里面没有换行,自然就block住了

解决方案 »

  1.   

    因为你的line太长,和楼上说的一样,没有换行~
    而程序是要读完一行才往下走的!
      

  2.   

    没错,不要使用readLine读取。
      

  3.   

    readline这个方法只有在遇到回车符或者换行符的时候才会将给返回值赋值的。
      

  4.   

    to Polarislee(北极星) :
       你说不要用readline读取,那么用什么读取呢?需要读入的数据包含一个xml文件。谢谢各位。
       我做了相应的调整之后,运行client以及server。但是,我将client的process关掉之后,
    server居然还能一直在不停的读取数据,并且,打印出来的数据赫然在目。如果我不shut掉
    server,它就一直不停的运行下去。faint,它是从哪儿read出来的数据呀~~~~。
    而且,server发送char时,client端:
    char aa=0;
    aa = ins.readChar(); 还是堵塞在这儿
      

  5.   

    DataInputStream in;
    in.read(byte[],int off,int len)
      

  6.   

    to jungangli(Add) :
    in.read(byte[],int off,int len) 返回的是一个int。
    我需要把数据取出来进行处理呢。
    thank you!
      

  7.   

    源码参见:
    http://community.csdn.net/Expert/topic/3116/3116338.xml?temp=.2916529
      

  8.   

    faint呀,我现在在每个线程里面创建一个socket。但就是
     aa = ins.readChar();   //line 104;
    这一行抛出异常:
    java.net.SocketException: Socket is closed
    at java.net.Socket.getInputStream(Socket.java:672)
    at dataexchange.ClientThread$SendDataThread.sendData(ClientThread.java:104)
    at dataexchange.ClientThread$SendDataThread.run(ClientThread.java:80)
      

  9.   


    我这样做的 接受的是xml文件 在每个线程里面 
            DataInputStream in;
            DataOutputStream out;
            m_clientSocket = socket;
            System.out.println("@@@:"+m_clientSocket);
            in = null;
            out = null;
            in = new DataInputStream(m_clientSocket.getInputStream());
            out = new DataOutputStream(m_clientSocket.getOutputStream());        byte buffer[] = new byte[MaxPackSize];
            int nread = 0;
            int r = 0;
            int readnum=in.read(buffer,0,MaxPackSize);
            ...................................
    然后你对xml解析和处理
      

  10.   

    Socket clientSocket =new Socket(IP,port);
      

  11.   

    to : gzhua99(孤浪) ( ) 
       3ku,但是我还是看不明白你是怎么做的。
       MaxPackSize 可以在client端得出并先发给server,但是,在处理xml文件的时候
    是怎么处理的呢?in.read(buffer,0,MaxPackSize);返回的是一个int呀,jdom或者dom
    或者sax都需要读入一个文件或者一个stream才能处理麽
      

  12.   

    你通过socket连接 客户端发送过来是用一个DataOutputStream
    output.write(sendstring.getBytes());发送过来的字节流
    你的服务端 DataInputStream in读取socket里的字节流 
    int readnum=in.read(buffer,0,MaxPackSize);
    byte buffer[] = new byte[MaxPackSize];
    放在了buff里面啊,然后你把这个字节数组转化为你想要的格式 
    处理 然后向客户端发送返回信息就可以了 
      

  13.   

    就是说你socket里面发送 接受的东西就是字节流
    其他转换工作要你自己做的
      

  14.   

    byte转换成字符,数据等好麻烦的.为什么我启动400个线程时
       Socket socket = new Socket(InetAddress.getByName("localhost"), clientPort);
    这句话就报错.connect refused.
    换成100个就ok.为什么呢?
      

  15.   

    1、网络传输一般用byte,byte和char转换有啥麻烦的。
    2、server在client关闭后,读到的是网路缓冲中的dd。