初学java,刚学到网络这节,试着写了个服务器端和客户端,调试了下,总是输出不了。大家看看要怎么修改,谢谢。import java.net.*;
import java.io.*;
public class TestSever{ public static void main(String[] args) throws Exception{ ServerSocket a=new ServerSocket(8888); while(true){ Socket s=a.accept(); System.out.println("a client connect!"); InputStream x=s.getInputStream(); InputStreamReader p=new  InputStreamReader(x); BufferedReader h=new BufferedReader(p); System.out.println(h.readLine()); h.close(); p.close(); x.close();
}
}
}
import java.net.*;
import java.io.*;public class TestClient{ public static void main(String[] args) throws Exception{ Socket s=new Socket("127.0.0.1",8888); OutputStream w=s.getOutputStream(); BufferedOutputStream q=new BufferedOutputStream(w);
String l; InputStreamReader c=new InputStreamReader(System.in); BufferedReader d=new BufferedReader(c);                while(true){ l=d.readLine(); System.out.println(d.readLine()); q.write(l.getBytes(),0,l.length()-1);
                } q.close(); }
}

解决方案 »

  1.   

    Serverpackage test;import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class Server{    public static void main(String[] args) throws Exception{        ServerSocket a=new ServerSocket(8888);        while(true){            Socket s=a.accept();            System.out.println("a client connect!");            InputStream x=s.getInputStream();            InputStreamReader p=new  InputStreamReader(x);            BufferedReader h=new BufferedReader(p);            System.out.println(h.readLine());            h.close();            p.close();            x.close();
            }
        }
    }Clientpackage test;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.util.Scanner;public class Client{    public static void main(String[] args) throws Exception{        Socket s=new Socket("127.0.0.1",8888);        OutputStream w=s.getOutputStream();        PrintWriter out = new PrintWriter(w);
            String l;        Scanner scanner = new Scanner(System.in);//控制台输入                while(true){                 l=scanner.next();                 System.out.println(l);
                     if(l == null) {
                     break;
                     }                 out.println(l);
                     out.flush();
                    }       out.close();    }
    }可以了 不过这个代码还是有问题的,楼主要清楚几个会阻塞的地方,accept会阻塞,同时读写都会阻塞,所以这个程序,在服务器端读取那里阻塞的时候,是不会accept新的客户端的,同时读取完一次后,循环到accept阻塞住了,这是时就不会接受新的输入了。应该用线程解决这个问题。
      

  2.   

    对于Server端的程序,Socket s=a.accept();之后,应该用 s 去创建一个新的线程,
    以下的读取从客户端传过来的字符串,都在这个线程去做,
    然后while(true)就又可以回来,继续Socket s=a.accept();
    如果LZ这样做,如果第一个客户端连进来,然后一直不输入字符串的话,
    那么其他的客户端也不会有用了。
      

  3.   


    你的客户端程序:
            BufferedReader d=new BufferedReader(c);                while(true){        l=d.readLine();        System.out.println(d.readLine());//这句我想你是要输入从控制台输入的字符串,那么不应该用d.readLine(),用l 就可以了。        q.write(l.getBytes(),0,l.length()-1);
                    }        q.close();//这句 永远走不到。    }