客户端的端口要和服务器的端口一样才行的
要不你把br.readline()打印出来吧

解决方案 »

  1.   

    st = new Thread(g);   -->  GetMessage gm = new GetMessage ();
      

  2.   


    客户端的端口要和服务器的端口一样才行的?
    还有这回事?不太可能吧。 再说了,br.readline()都已经等待了,没法打印。
      

  3.   

    SocketInputStream的read方法是阻塞等待的操作,如果没有可接收数据,就会一直等待。同时OutputStream的实例往往需要调用flush才能真正执行写操作。如果是这个原因,在发送端加个flush试试。
    BufferedReader中存在缓存,采用br.readLine()是按单位接收,回车换行为终结或则是流结束。建议如果发送端不是按指令行发送,就别用这种东西。
      

  4.   

    GetMessage是继承的Thread类,直接创建线程对象。
    你那种创建线程的方法是GetMessage实现Runnable接口的情况。
      

  5.   

    把null改成-1试试
    if((line = br.readLine())!=-1)
      

  6.   

    readLine 方法是阻塞的方法
    你不输入信息它就停在这里  不继续执行
    所以一般有阻塞的时候要用到多线程。
    这样你就既可以 获取readLine方法的信息
    又不影响你的主函数运行所以你现在要引入线程咯 。。
      

  7.   

    发送端每发一段字节之后,要加个flush,才能把发送端的缓冲区内容发出到客户端缓冲区。
      

  8.   

    确定是在if((line = br.readLine())!= null)这里停止程序运行的吗 想个办法测试一下 在sleep()之前打印些测试的东西试试!
      

  9.   


    按你的说法,java的客户端还必须连java的服务器啦。要是别的没有flush怎么办?
      

  10.   

    readline是一个阻塞模式啊,要碰到回车才会继续执行
      

  11.   

    GetMessage g = new GetMessage();// 
    st = new Thread(g);    --------这个是Runnable接口的启动方法把
    st.start(); 
    class GetMessage extends Thread{ 
    public void run(){ 
      

  12.   

    问题的原因应该是对方发送的字符中并不包含回车,所以readLine()会一直阻塞
    你应该让对方发送回车
      

  13.   

    用字节比较好SOCKET接口走的是CLI。谁知道哪里是行啊。readline读文件还可以.读SOCKET不好吧.。所以用字符串读取不是好的IDEA中字节流吧。。我们项目中的一段代码。。private Socket myClientSocket; private PrintWriter myWriter;
    private BufferedReader myReader; private String myRemoteAddress;String command;        char[] resp;
            int read = 0;                timeoutTask = new TimeOutTask(this);
            mySessionMgr.startTimeoutTask(this);        while( !isStopping )
            {
         resp = new char[4000];
                try
                {
                    read = myReader.read(resp);                if (read == -1)         //if remote socket is closed
                    {
                        logger.info("Remote Disconnected: " + myRemotePort + "@" + myRemoteAddress);
                        isStopping = true;                    myWriter.close();
                        myReader.close();
                        myClientSocket.close();                    myWriter = null;
                        myReader = null;
                        myClientSocket = null;                    continue;
                    }                command = new String(resp,0,read);
                    timeoutTask.cancel();
                    myProcessor.processCLIMsg(command, this);
    //
                    timeoutTask = new TimeOutTask(this);
                    mySessionMgr.startTimeoutTask(this);
                   // myClientSocket.close();以上信息.FRI
      

  14.   

    Streams are a fairly simple data structure; they are best thought of as linear sequences of bytes.
      

  15.   

    这个问题已经解决了,但收到的东西有点不对。呵呵。 先结贴。谢谢大家。gannian的东西不错。为什么每次发送后需要flush(),这个有点不明白。而且还需要有结束符。