zhj92lxs 老师给在下的指点,通过下边的代码,可以从client发送信息到服务器端,server并能成功接收
服务器端可以通过这个client连接,取得client的IP及端口!那么,如何让server端,按需给client端发送信息呢?或者说,即便这一分钟收到一个client的信息,但server端并不急于去回复这个client,只当等到server的某个事情被激发(比如按钮按下,比如时间到某个时刻等),或者说服务器与client收发异步(说异步也许是不正确的) 请老师指教!!!
void waitlink() 
    { 
        try 
        { 
            ss=new ServerSocket(9091); 
          
                servers=ss.accept();                 sdis=new BufferedReader(isr=new InputStreamReader(servers.getInputStream()));                 //bw=new BufferedWriter(osw=new OutputStreamWriter(servers.getOutputStream())); 
              String lineStr = null; 
                while((lineStr=sdis.readLine())!=null) 
                {                   jta1.setText(jta1.getText()+lineStr); 
                  jta1.repaint();    
                  System.out.println(lineStr); 
                } 
          
ss.close(); 
          //bw.write("hello"); 
        } 
        catch(Exception e) 
        { 
            e.printStackTrace(); 
        } 
      
      
    } 

解决方案 »

  1.   

    如果两端的链接没有被close的话,就可以随时发信息给客户端。
      

  2.   

    但是,在下在本机上做测试C/S同时开启,先S,后开C,如果不ss.close();我的server端就不能接收到信息,但是如果加上了ss.close();该如何弄呢???请老师指点
    void waitlink() 
        { 
            try 
            { 
                ss=new ServerSocket(9091); 
              
                    servers=ss.accept();                 sdis=new BufferedReader(isr=new InputStreamReader(servers.getInputStream()));                 //bw=new BufferedWriter(osw=new OutputStreamWriter(servers.getOutputStream())); 
                  String lineStr = null; 
                    while((lineStr=sdis.readLine())!=null) 
                    {                   jta1.setText(jta1.getText()+lineStr); 
                      jta1.repaint();    
                      System.out.println(lineStr); 
                    } 
              
    ss.close(); 
              //bw.write("hello"); 
            } 
            catch(Exception e) 
            { 
                e.printStackTrace(); 
            } 
          
          
        } 
      

  3.   

    先创建一个Boolean flag=false; 
    分析从客户端接受到的字符,如果是想要一分钟以后回的消息,那么将flag置为true;
    当服务器端触发事件如:jbutton.addActionListener(this)时,在actionperform中的代码判断一下,
    如果flag为true,那么此时就向客户端发送一条XXX消息。
      

  4.   

    但是我上边的代码中,ss.close();已经在客户端发送一次信息后,关掉了呀,这时server端如何能去打通(或者说)叫client端开起一个socket来接收呀???在下觉得,能不能有一种方法,让client端的这个socket在建立后,就一直处于等待状态,或者说挂起也行!或者干脆这样说,当我们使用QQ时,我们的QQ客户端的socket是不是可以说是一直存在着的,否则,QQ服务器怎么能随时给我们发来广告,系统消息等信息呢?
      

  5.   

    用while(true){
    ...
    }
    ss.close();
    调用一个死循环,除非在while里用break;否则永远在接受数据。
      

  6.   

    faint!!
    完全搞不明白。
    谢谢以上的大大!