黑马程序员技术交流社区

标题: TCP问题 [打印本页]

作者: 李东梁    时间: 2014-3-29 21:01
标题: TCP问题
  1. package cn.itcast.net.TPC;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStreamWriter;
  7. import java.net.Socket;
  8. import java.net.UnknownHostException;

  9. public class TransClient {

  10.         public static void main(String[] args) throws UnknownHostException, IOException {
  11.                
  12.                 Socket s=new Socket("127.0.0.1",10014);
  13.                
  14.                 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
  15.                
  16.                 BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  17.                 //PrintWriter out =new PrintWriter(s.getOutputStream(),true);
  18.                
  19.                
  20.                 BufferedReader bufrin=new BufferedReader(new InputStreamReader(s.getInputStream()));
  21.                
  22.                 String line=null;
  23.                 while ((line=bufr.readLine())!=null) {
  24.                         if("over".equals(line))
  25.                                 break;
  26.                        
  27.                         bufw.write(line);
  28.                        
  29.                         String str=bufrin.readLine();
  30.                        
  31.                         System.out.println("转换后"+str);
  32.                 }
  33.                 s.close();       
  34.         }
  35. }
复制代码
  1. package cn.itcast.net.TPC;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;

  8. public class TransServer {

  9.         public static void main(String[] args) throws IOException {

  10.                 ServerSocket ss=new ServerSocket(10014);
  11.                
  12.                 Socket s=ss.accept();
  13.                
  14.                 System.out.println(s.getInetAddress().getHostName());
  15.                
  16.                 BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
  17.                
  18.                 PrintWriter out=new PrintWriter(s.getOutputStream(),true);
  19.                
  20.                 String line=null;
  21.                
  22.                 while ((line=bufIn.readLine())!=null) {
  23.                         out.println(line.toUpperCase());
  24.                 }
  25.                 s.close();
  26.                 ss.close();       
  27.         }
  28. }
复制代码
做了一个,TCP协议的服务器客户端,服务器只负责把输入的字母转换成大写,我这样写不能翻译,错在了哪?



作者: ╰つ    时间: 2014-3-29 22:12
噢耶,总算把问题调出来了,好长时间没玩这个东西了,太坑了,原因是你没有使用flush把它刷到服务端去,所以服务端读取不到你的数据,所以你的客户端也不会收到数据,修正代码如下:


  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.net.Socket;
  7. import java.net.UnknownHostException;

  8. public class stock {
  9.    public static void main(String[] args) throws UnknownHostException, IOException {
  10.            Socket s=new Socket("127.0.0.1",10014);

  11.                          

  12.                           BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));

  13.                          

  14.                          BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

  15.                          //PrintWriter out =new PrintWriter(s.getOutputStream(),true);

  16.                       

  17.                       

  18.                        BufferedReader bufrin=new BufferedReader(new InputStreamReader(s.getInputStream()));

  19.                         

  20.                        String line=null;
  21.                       StringBuffer sb=new StringBuffer();
  22.                          while ((line=bufr.readLine())!=null) {
  23.                       
  24.                                  sb.append(line+"\n");
  25.                                   if("over".equals(line)){
  26.                                           System.out.println(123);
  27.                                           break;
  28.                                   }
  29.                          }
  30.                              
  31.                             
  32.                               bufw.write(sb.toString());
  33.                               bufw.flush();
  34.                                  String str=bufrin.readLine();

  35.                                   
  36.                                  System.out.println("xixixiixxiixixix");
  37.                                    System.out.println("转换后"+str);

  38.                         

  39.                          s.close();        

  40. }
  41. }
复制代码
  1. package stock;


  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;

  8. public class server {

  9.         /**
  10.          * @param args
  11.          * @throws IOException
  12.          */
  13.         public static void main(String[] args) throws IOException {
  14.                 ServerSocket ss=new ServerSocket(10014);

  15.                               

  16.                         Socket s=ss.accept();

  17.                       

  18.                                System.out.println(s.getInetAddress().getHostName());

  19.               

  20.                      BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));

  21.                       

  22.                        PrintWriter out=new PrintWriter(s.getOutputStream(),true);

  23.                       

  24.                                String line=null;

  25.                               

  26.                       while ((line=bufIn.readLine())!=null) {
  27.                         
  28.                               out.println(line.toUpperCase());

  29.                        }
  30.                       out.close();
  31.                               s.close();

  32.                                ss.close();


  33.         }

  34. }
复制代码

作者: ╰つ    时间: 2014-3-29 22:17
不好意思,一些调试语句没有去,还有你的程序有一些小问题,你发现没你客户端只能读取一行,不知道你是这样设计的,还是另有原因




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2