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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Teemo_Mann 中级黑马   /  2014-4-15 21:10  /  876 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Teemo_Mann 于 2014-4-16 19:07 编辑

为什么我的客户端输入一次之后,再输一次就没反应了
帮忙看下

Client端
  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintStream;
  6. import java.net.InetAddress;
  7. import java.net.Socket;
  8. import java.util.Scanner;

  9. public class Test10Client {

  10.         public static void main(String[] args) {
  11.                 // TODO Auto-generated method stub
  12.                
  13.                 Socket socket = null;
  14.                
  15.                 try {
  16.                         
  17.                         //创建Socket, 用于和客户端建立连接
  18.                     socket = new Socket("127.0.0.1", 1234);
  19.                     while(true){
  20.                             BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  21.                             PrintStream ps = new PrintStream(socket.getOutputStream());
  22.                            
  23.                             //Scanner用于接收用户控制台输入
  24.                             Scanner scanner = new Scanner(System.in);   
  25.                             System.out.println("请输入一个字符串:");
  26.                             String line = scanner.nextLine();
  27.                            
  28.                             ps.println(line);         // 发送到服务端
  29.                             System.out.println(br.readLine());     // 读取服务端发回的字符串并进行 打印  
  30.                     }
  31.                 } catch (Exception e) {
  32.                    // TODO Auto-generated catch block
  33.                         e.printStackTrace();
  34.                 } finally{
  35.                         if(socket != null){
  36.                     try {
  37.                             socket.close();
  38.                     } catch(IOException e){
  39.                      // TODO Auto-generated catch block
  40.                             e.printStackTrace();
  41.                     }
  42.                   }
  43.                 }
  44.         }

  45. }
复制代码


Server端
  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintStream;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. /**
  9. * 使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。

  10. 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
  11. *
  12. *
  13. */
  14. public class Test10 {

  15.         public static void main(String[] args) {
  16.                 // TODO Auto-generated method stub
  17.                
  18.                 Socket socket = null;               
  19.                 try {               
  20.                         ServerSocket serverSocket = new ServerSocket(1234);
  21.                     while(true){
  22.                             //创建绑定端口1234的对象ServerSocket
  23.                            
  24.                             socket = serverSocket.accept();//接收客户端请求,若有客户端请求,则连接并创建Socket
  25.                             BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//创建带缓冲的字符读入流
  26.                             String sr = br.readLine();//读取客户端发送过来的消息
  27.                             PrintStream ps = new  PrintStream(socket.getOutputStream());
  28.                             ps.println(new StringBuffer(sr).reverse());//将反转后的字符串发送给客户端
  29.                     }                  
  30.                 } catch (IOException e) {
  31.                    // TODO Auto-generated catch block
  32.                     e.printStackTrace();
  33.                 } finally{
  34.                     if(socket != null){
  35.                             try {                           
  36.                                     socket.close();
  37.                             } catch (IOException e) {
  38.                              // TODO Auto-generated catch block
  39.                                     e.printStackTrace();
  40.                             }
  41.                     }
  42.                 }
  43.         }

  44. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

1 个回复

倒序浏览
你把许多不需要放进循环中的语句放入循环中了,而且没有定义结束的方法。
我把你的程序修改了一下,并设定客户端输入over字符串,则传输结束。

客户端
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintStream;
  5. import java.net.InetAddress;
  6. import java.net.Socket;
  7. import java.util.Scanner;

  8. public class Test10Client {

  9.         public static void main(String[] args) {
  10.                 // TODO Auto-generated method stub
  11.                
  12.                 Socket socket = null;
  13.                
  14.                 try {
  15.                         
  16.                         //创建Socket, 用于和客户端建立连接
  17.                     socket = new Socket("127.0.0.1", 1234);
  18.                     BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  19.                     PrintStream ps = new PrintStream(socket.getOutputStream());           
  20.                     while(true){
  21.                  
  22.                             //Scanner用于接收用户控制台输入
  23.                             Scanner scanner = new Scanner(System.in);   
  24.                             System.out.println("请输入一个字符串:");
  25.                             String line = scanner.nextLine();                        
  26.                             if( "over".equals(line)){
  27.                                  break;
  28.                             }else{  
  29.                                  ps.println(line);         // 发送到服务端                          
  30.                                  System.out.println(br.readLine());     // 读取服务端发回的字符串并进行 打印
  31.                             }
  32.                     }
  33.                 } catch (Exception e) {
  34.                    // TODO Auto-generated catch block
  35.                         e.printStackTrace();
  36.                 } finally{
  37.                         if(socket != null){
  38.                     try {
  39.                             socket.close();
  40.                     } catch(IOException e){
  41.                      // TODO Auto-generated catch block
  42.                             e.printStackTrace();
  43.                     }
  44.                   }
  45.                 }
  46.         }

  47. }
复制代码


服务器端
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintStream;
  5. import java.net.ServerSocket;
  6. import java.net.Socket;
  7. /**
  8. * 使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。

  9. 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
  10. *
  11. *
  12. */
  13. public class Test10 {

  14.         public static void main(String[] args) {
  15.                 // TODO Auto-generated method stub
  16.                
  17.                 Socket socket = null;               
  18.                 try {               
  19.                         ServerSocket serverSocket = new ServerSocket(1234);
  20.                         socket = serverSocket.accept();//接收客户端请求,若有客户端请求,则连接并创建Socket
  21.                         BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//创建带缓冲的字符读入流
  22.                         PrintStream ps = new  PrintStream(socket.getOutputStream());
  23.                     while(true){
  24.                             //创建绑定端口1234的对象ServerSocket
  25.                             String sr = br.readLine();//读取客户端发送过来的消息
  26.                             if( null == sr ){
  27.                                  break;
  28.                             }else{   
  29.                                     ps.println(new StringBuffer(sr).reverse());//将反转后的字符串发送给客户端
  30.                             }
  31.                     }                  
  32.                 } catch (IOException e) {
  33.                    // TODO Auto-generated catch block
  34.                     e.printStackTrace();
  35.                 } finally{
  36.                     if(socket != null){
  37.                             try {                           
  38.                                     socket.close();
  39.                             } catch (IOException e) {
  40.                              // TODO Auto-generated catch block
  41.                                     e.printStackTrace();
  42.                             }
  43.                     }
  44.                 }
  45.         }

  46. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马