客户端:
public void run(){ //使线程ClientStartThread跑起来
try{
/*
 * 利用流将数据在socket上进行传输,主要是利用inputStream和outputStream.
 * 同时使用getInputStream()和getOutStream()将流打包,
 * 最后用BufferdReader建立缓存以便能方便的进行读写
 * */
System.out.println("啥子问题!");
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
while(true){
System.out.println("最后这点那!");
try{
String i=in.readLine(); //将读取缓存的数据转化为字符串
p.setText(i); //将获得的in作为字符串打印在文本框内
}catch (Exception e) {
e.printStackTrace();
break;
}
}
in.close(); //关闭in
s.close(); //关闭socke
}catch(Exception e){
e.printStackTrace();
}
}
服务器端:
public void run(){ //线程正式"跑起来"
try{
/*
 * 利用流将数据在socket上进行传输,主要是利用inputStream和outputStream.
 * 同时使用getInputStream()和getOutStream()将流打包,
 * 最后用BufferdReader建立缓存以便能方便的进行读写
 * */
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
while(true){
Date d = new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd  kk:mm:ss ");
String date=sdf.format(d);
System.out.println("看看sever这端!");
out.write(date+"\n"); //将时间输出到客户端
out.flush(); //刷新out
String strWord = in.readLine(); //获取客户端发过来的字符串
System.out.println("这个不晓得!");
try {
Thread.sleep(5000); //每隔1分钟给客户端发送数据
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
if(strWord=="quit"){ //当捕获的字符串是"quit"时
     long end = System.currentTimeMillis();//获取捕获"quit"数据时的时间
out.write("链接用时"+(end-start)+"毫秒");//计算该客户链接的时间
p.setText("客户端正常关闭!"); //打印客户的正常关闭
break;
}
}
in.close(); //关闭in
s.close(); //关闭socket链接
}catch(Exception e){
e.printStackTrace();
}
}
原意是从服务器端每五秒发送时间到客户端,直到客户端输送“quit”到服务器端。但是现在只是给客户端发送了一次就关闭了socket 再也发送不了了!

解决方案 »

  1.   

    服务器代码没问题吗?客户端请求后,进入循环,发送消息给客户端,然后读信息?
    while(true){
    Date d = new Date();
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd kk:mm:ss ");
    String date=sdf.format(d);
    System.out.println("看看sever这端!");
    out.write(date+"\n"); //将时间输出到客户端
    out.flush(); //刷新out
    String strWord = in.readLine(); //获取客户端发过来的字符串,**这是个阻塞方法**System.out.println("这个不晓得!");
      

  2.   

    阻塞的方法当没有数据可读时,就处于等待状态,不再继续执行,感觉这是逻辑上的问题,
    你可以试着先判断下inputstream.available()
      

  3.   


    if(in.available()>0)
    {
    String strWord = in.readLine(); //获取客户端发过来的字符串
    if(strWord=="quit"){ //当捕获的字符串是"quit"时
    long end = System.currentTimeMillis();//获取捕获"quit"数据时的时间
    out.write("链接用时"+(end-start)+"毫秒");//计算该客户链接的时间
    p.setText("客户端正常关闭!"); //打印客户的正常关闭
    break;
    }
    }
      

  4.   

    我怎么在if(in.available()>0)红色的地方报错呀!in没有这个方法
    急求!!!
      

  5.   

    不行呀  if(in.available()>0)要报错in没有这样的方法!!!大侠 救命呀!
      

  6.   

    ServerSocket ss=new ServerSocket();
    ss.accept()这个方法没有重复执行就会导致只能接受一次客户端;
    处理的方法通常是死循环
    while(true){
    Socket s=ss.ss.accept();
    new MyThreadforEachClient(s).start()
    }class MyThreadforEachClient extends Thread{public MyThread(Socket s){
    this.s=s;
    }
    void run(){
    .........................
    .........................具体的逻辑代码这里写
    }
    }
      

  7.   

    因为服务器都是多线程的东西,所以必须是一个多线程的角度去考虑问题,每一个客户端连接起来了,我就拿到该客户端的Socket,然后给它一个独立的线程去对付没一个客户端。你还要管理客户端,就需要一个集合类来管理啦
    比如 list<MyThreadforEachClient> clients=new LinkedList<MyThreadforEachClient>();
    在该线程抛异常的时候把该线程的循环代码结束掉,然后在集合类里面把它remove掉。
      

  8.   

    可是in没有这个方法,我用null试了一下可以,但是就是把quit命令的东西也弄没作用了!现在就是想找一个方法能执行quit,也就是null的相反的方法!
      

  9.   

    SufferedReder里面没有这个方法,是InputStream里面的方法,你可以用readLine()方法的返回值进行判断String strWord;  //获取客户端发过来的字符串
    while(((strWorld = in.readLine()) != null){
    Date d = new Date();
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd kk:mm:ss ");
    String date=sdf.format(d);
    System.out.println("看看sever这端!");
    out.write(date+"\n");  //将时间输出到客户端
    out.flush();  //刷新out
    System.out.println("这个不晓得!");
    try {
    Thread.sleep(5000);  //每隔1分钟给客户端发送数据
    } catch (InterruptedException e) {
    e.printStackTrace();
    break;
    }
      

  10.   

    有谁知道用webService java类调用XML的配置吗?我用的框架是ssh,要把数据保存到数据库。在此谢谢了。可以发我QQ1132339161