A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© z1342802487 中级黑马   /  2014-4-30 10:36  /  1133 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 z1342802487 于 2014-5-2 21:31 编辑

我想写一个服务程序,接受客户端发送的语句,收到信息后向客户端发送,服务端输入bye结束服务端运行。客户端输入bye结束客户端运行。为什么我的程序只能发一次?之后就输不进去了。客户端
  1. import java.io.*;
  2. import java.net.*;
  3. public class TCPClient
  4.         {
  5.                 public static void main(String[] args)
  6.                         {
  7.                                 try
  8.                                         {
  9.                                                 Socket socket = new Socket("localhost",10002);
  10.                                                 BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
  11.                                                 PrintWriter osPrintWriter = new PrintWriter(socket.getOutputStream());
  12.                                                 BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  13.                                                 System.out.println("Client start to writing....");
  14.                                                 String readline;
  15.                                                 readline = sin.readLine();
  16.                                                 while (!readline.equals("bye"))
  17.                                                         {
  18.                                                                 osPrintWriter.println(readline);
  19.                                                                 osPrintWriter.flush();
  20.                                                                 System.out.println("Client:"+readline);
  21.                                                                 System.out.println("From Server:"+is.readLine());
  22.                                                                 readline=sin.readLine();
  23.                                                         }
  24.                                                 osPrintWriter.close();
  25.                                                 is.close();
  26.                                                 socket.close();
  27.                                         } catch (Exception e1)
  28.                                         {
  29.                                         }
  30.                         }
  31.         }
复制代码


服务端代码,
  1. import java.io.*;
  2. import java.net.*;
  3. public class TCPServer
  4.         {
  5.                 public static void main(String[] args)
  6.                         {
  7.                         try
  8.                                 {
  9.                                         ServerSocket server=null;
  10.                                         try
  11.                                                 {
  12.                                                         server=new ServerSocket(10002);
  13.                                                 } catch (Exception e)
  14.                                                 {
  15.                                                 }
  16.                                         Socket socket = null;
  17.                                         try
  18.                                                 {
  19.                                                         socket=server.accept();
  20.                                                         System.out.println("Server has started");
  21.                                                 } catch (Exception e1)
  22.                                                 {
  23.                                                 }
  24.                                         String line;
  25.                                         BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
  26.                                         PrintWriter os = new PrintWriter(socket.getOutputStream());
  27.                                         BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
  28.                                         System.out.println("From Client:"+is.readLine());
  29.                                         line=sin.readLine();
  30.                                         while (!line.equals("bye"))
  31.                                                 {
  32.                                                         os.print(line);
  33.                                                         System.out.println("Server:"+line);
  34.                                                         System.out.println("From Client:"+is.readLine());
  35.                                                         line=sin.readLine();
  36.                                                 }
  37.                                         os.close();
  38.                                         is.close();
  39.                                         socket.close();
  40.                                         server.close();
  41.                                 } catch (Exception e)
  42.                                 {
  43.                                         e.printStackTrace();
  44.                                 }        
  45.                         }
  46.         }
复制代码



评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
亲,加一个循环白!while() 里面在加上判断语句,根据盘短语句输入跳出循环.
回复 使用道具 举报
  1. 修正后的代码如下,没有错误。
  2. public class TCPClient
  3. {
  4.     public static void main(String[] args)
  5.     {
  6.             try
  7.             {

  8.             Socket socket = new Socket("localhost",10002);

  9.             BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));

  10.             PrintWriter osPrintWriter = new PrintWriter(socket.getOutputStream(),true);

  11.             BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));

  12.             System.out.println("Client start to writing....");
  13.             String readline;
  14.             readline = sin.readLine();

  15.             while (!readline.equals("bye"))
  16.             {
  17.                    
  18.                     osPrintWriter.println(readline);
  19.                    
  20.                 System.out.println("Client:"+readline);
  21.                
  22.                 System.out.println("From Server:"+is.readLine());
  23.                
  24.                
  25.                 readline=sin.readLine();
  26.             }

  27.            osPrintWriter.close();

  28.            is.close();

  29.            socket.close();

  30.          }
  31.          catch (Exception e1)
  32.          {
  33.                  
  34.          }
  35.         

  36.     }
  37. }

  38. public class TCPServer
  39. {

  40.     public static void main(String[] args) throws IOException
  41.     {
  42.             ServerSocket server=null;
  43.                 try
  44.                 {                       
  45.                         server=new ServerSocket(10002);
  46.                        
  47.                 }
  48.                 catch (Exception e)
  49.                 {
  50.                        
  51.                 }
  52.                        
  53.                 Socket socket = null;
  54.                 String line = null;
  55.                 BufferedReader is = null;
  56.                 PrintWriter  os = null;
  57.                 try
  58.                 {
  59.                
  60.                         socket=server.accept();               
  61.                         System.out.println("Server has started");
  62.                
  63.                 }
  64.                 catch (Exception e1)               
  65.                 {
  66.                         e1.printStackTrace();
  67.                 }
  68.                
  69.                 is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
  70.                 os = new PrintWriter(socket.getOutputStream(),true);
  71.                 BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
  72.                 while (!"bye".equals(line))
  73.                 {           
  74.                         System.out.println("From Client:"+is.readLine());       
  75.                        
  76.                     line=sin.readLine();       
  77.                     System.out.println("Server:"+line);

  78.                     os.println(line);
  79.                     line = sin.readLine();
  80.                 }
  81.                 os.close();
  82.                
  83.                 is.close();
  84.                
  85.                 socket.close();
  86.                 server.close();
  87.         }
  88. }

  89. 源代码的错误可能是一些具有线程阻塞性的函数顺序放错了,导致只能发送一次便阻塞了。
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马