CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

一个关于socket通信的问题,高手进!!

楼主Helloooooo(每天,我都新的)2006-03-02 17:53:50 在 Java / J2SE / 基础类 提问

自己写了一个Socket通信的小程序,实现了服务端和客户端的通信.  
  下面一段程序是当客户端程序上的Connect按钮按下时就开始连接服务器并接受服务器发回的信息  
  为了接受信息我新开的一个线程.  
  按道理来说,run里面没有嵌套也没有循环,在运行一次后就应该退出了.<<Core   Java>>一书中也写道  
  当线程的run方法返回时,该线程就中止运行.  
  但测试却发觉这个线程是一直运行的:因为此程序一直可以接收服务器发回的信息.  
  为什么?  
  JButton   buttonConnect   =   new   JButton("Connect");  
          buttonConnect.addActionListener(new   ActionListener()   {  
              public   void   actionPerformed(ActionEvent   event)   {  
                  try   {  
                      m_socket   =   new   Socket("127.0.0.1",   8189);  
                      new   Thread()   {//新开一个线程,使用内部类  
                          public   void   run()   {  
                              try   {                                  
                                  m_in   =   new   BufferedReader(new   InputStreamReader(m_socket.  
                                          getInputStream()));                                  
                                  String   str   =   m_in.readLine();  
                                  while(str   !=   null){  
                                          System.out.println(str);  
                                          str   =   m_in.readLine();                                    
                                      }//注意这儿,利用调试模式跟踪发现,当读完字符后,到此处跟踪失效,  
                                        //只有当服务器端再发来信息又可以继续进入while循环.也就是说在此处程序在等待消息.                                
                              }  
                              catch   (Exception   e)   {  
                                  e.printStackTrace();  
                              }  
                          }  
                      }.start();                      
                  }  
                  catch   (Exception   e)   {  
                      e.printStackTrace();  
                  }  
              }  
          }); 问题点数:20、回复次数:7Top

1 楼725137(2006年不会菜)回复于 2006-03-02 18:05:14 得分 0

没有循环?你这句是做什么的?  
    while(str   !=   null)//改成if就不是循环  
  {  
      System.out.println(str);  
      str   =   m_in.readLine();//  
  }Top

2 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-03-02 18:08:39 得分 0

while(str   !=   null){  
                                          System.out.println(str);  
                                          str   =   m_in.readLine();                                    
                                      }//  
   
  这里你需要定义一个标志信息通知客户端停止读数据  
  不然会一直等待   ,因为你这里有一个while循环  
   
  或者不要循环Top

3 楼Helloooooo(每天,我都新的)回复于 2006-03-02 18:21:38 得分 0

2位兄台啊,这儿是有一个循环。  
  但是问题本身并不出在循环上,  
  如果按照你们的解释,  
  那么只要读完数据就应该退出循环。  
   
  但问题是并没有退出循环,  
  而是程序等在那儿,  
  直到服务器又传来数据!!!Top

4 楼725137(2006年不会菜)回复于 2006-03-02 18:36:18 得分 20

晕。。你在这里不停的循环,readLine()如果一但读不到数据时他会自动发生阻塞,等待有信息过来..  
   
  readLine()方法是会发生阻塞的。。建议多看下书..  
  Top

5 楼725137(2006年不会菜)回复于 2006-03-02 18:38:56 得分 0

你应该加个判断  
  while(str   !=   null)  
  {  
          System.out.println(str);  
          str   =   m_in.readLine();                                    
          if   (str.equals("quit"))   //如果服务器过来的信息是quit.那么退出while  
                  break;  
      }Top

6 楼725137(2006年不会菜)回复于 2006-03-02 18:40:05 得分 0

str!=nullTop

7 楼Helloooooo(每天,我都新的)回复于 2006-03-02 19:20:46 得分 0

好的,帅哥,这个就是我要问的东西:  
  它实现的原理是什么?  
  我如何也这样构建一个类?  
   
  谢谢。  
   
  ----------------------------    
  725137(2006年不会菜)   (   )   信誉:100     2006-03-02   18:36:00     得分:   0      
     
     
        晕。。你在这里不停的循环,readLine()如果一但读不到数据时他会自动发生阻塞,等待有信息过来..  
   
  readLine()方法是会发生阻塞的。。建议多看下书..  
   
       
     
  Top

相关问题

  • SOCKET 通信
  • JAVA中的 SOCKET能否与DELPHI中的 SOCKET进行通信
  • 高分提问:如果进行SOCKET 通信
  • 如何与domino服务器进行socket通信?
  • 在internet上和局域网内的机器进行socket通信
  • 请Winsoket高手进来帮Me看看socket通信问题
  • 求教关于socket通信
  • socket通信的问题
  • 关于socket通信问题
  • !!!求助。socket通信之eofexception!!!

关键词

  • 循环
  • 服务器
  • 通信
  • 线程
  • 数据
  • socket
  • 客户
  • 信息
  • null
  • readline

得分解答快速导航

  • 帖主:Helloooooo
  • 725137

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo