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

© 杨增坤 金牌黑马   /  2013-7-27 20:03  /  1376 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 2013-7-28 09:25 编辑

此功能是:把客户端服务器端发送和接收的数据都存在文件中。
客户端:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClient {
   public static void main(String [] a) throws UnknownHostException, IOException{
           FileWriter fw=new FileWriter("F:\\123\\sc.txt",true);
           Socket client=new Socket("192.168.1.100",11111);//创建客户端
            /*
             * 发数据
             */
           OutputStream out= client.getOutputStream();//获取输出流
           
          BufferedReader  buf=new BufferedReader(new InputStreamReader(System.in));//读取键盘对象
          BufferedWriter BuOut=new BufferedWriter(new OutputStreamWriter(out));//输入流
          InputStream in=client.getInputStream();
          BufferedReader BufR=new BufferedReader(new InputStreamReader(in));//输出流
         
          String line=null;
          while((line=buf.readLine())!=null){
                  if("886".equalsIgnoreCase(line))
                          break;
                  BuOut.write(line);
                  BuOut.newLine();
                  BuOut.flush();
                  fw.write("clint-send:"+line+"\r\n");                  
                  fw.flush();
                  
                 String str= BufR.readLine();
                 System.out.println(str);
                 fw.write("clint-re:"+str+"\r\n");
                    fw.flush();
          }
         buf.close();
          client.close();
   }
}

服务器端:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
        public static void main(String[] s) throws IOException {
                FileWriter fw = new FileWriter("F:\\123\\sc.txt", true);
                ServerSocket server = new ServerSocket(11111);
                Socket cli = server.accept();
                String ip = cli.getLocalAddress().getHostAddress();
                System.out.println("服务器端接收到的客户端IP" + ip);
                fw.write("服务器端接收到的客户端IP" + ip);
                fw.flush();

                InputStream in = cli.getInputStream();
                BufferedReader BufIn = new BufferedReader(new InputStreamReader(in));
                OutputStream out = cli.getOutputStream();
                BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(out));
                String line = null;
                while ((line = BufIn.readLine()) != null) {
                        System.out.println(line);
                        fw.write("server-re:" + line + "\r\n");
                        fw.flush();
                        line = line.toUpperCase();               
                        bufOut.write(line);
                        bufOut.newLine();
                        bufOut.flush();
                        System.out.println(line);
                        
                        fw.write("server-re-zhuan:"+line+ "\r\n");
                        fw.flush();

                }
               
                cli.close();

        }
}

为什么,启动服务端和客户端后,从键盘读取数据后,文件中怎么就只有收到的IP呢??
请指教!!!!!

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

1 个回复

倒序浏览
你的代码我测试了,基本是没有问题的,但是感觉很乱,我重新给你加上了时间,并且加上了注释,个别部分更改了一下,请对照你自己的代码看一下
服务端代码
  1. package com.itheima;
  2. //服务器端:
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.InputStreamReader;
  9. import java.io.OutputStream;
  10. import java.io.OutputStreamWriter;
  11. import java.net.ServerSocket;
  12. import java.net.Socket;
  13. import java.text.SimpleDateFormat;
  14. import java.util.Date;

  15. public class TcpServer {
  16.         public static void main(String[] args) throws IOException {
  17.                 FileWriter fw = new FileWriter("F:\\123\\sc.txt", true);
  18.                 ServerSocket server = new ServerSocket(11111);
  19.                 Socket cli = server.accept();//接收客户端
  20.                
  21.                 Date d = new Date();
  22.                 SimpleDateFormat f = new SimpleDateFormat();
  23.                 String s = f.format(d);
  24.                 String ip = cli.getLocalAddress().getHostAddress();
  25.                 System.out.println("服务器端接收到的客户端IP:" + ip);
  26.                 fw.write(s+"--服务器端接收到的客户端IP:" + ip + "\r\n");
  27.                 fw.flush();

  28.                 InputStream in = cli.getInputStream();//客户端的输入流
  29.                 BufferedReader BufIn = new BufferedReader(new InputStreamReader(in));//字符流缓冲区
  30.                
  31.                 OutputStream out = cli.getOutputStream();//客户端的输出流
  32.                 BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(out));//字符流缓冲区
  33.                
  34.                 //打印从客户端发来的信息并写入到文件
  35.                 String line = null;   
  36.                 while ((line = BufIn.readLine()) != null) {
  37.                         System.out.println(line);
  38.                         fw.write("server-re:" + line + "\r\n");
  39.                         fw.flush();
  40.                         line = line.toUpperCase();               
  41.                         bufOut.write("你好客户端,信息已收到"+ "\r\n");//给客户端的回执
  42.                         bufOut.newLine();
  43.                         bufOut.flush();                       
  44.                 }               
  45.                 cli.close();
  46.         }
  47. }
复制代码
客户端代码
  1. package com.itheima;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStream;
  9. import java.io.OutputStreamWriter;
  10. import java.net.Socket;
  11. import java.net.UnknownHostException;

  12. public class TcpClient {
  13.    public static void main(String[] args) throws UnknownHostException, IOException{
  14.           FileWriter fw = new FileWriter("F:\\123\\sc.txt",true);
  15.           Socket client = new Socket("127.0.0.1",11111);//创建客户端
  16.             /*
  17.              * 发数据
  18.              */
  19.           OutputStream out = client.getOutputStream();//获取输出流         
  20.           BufferedReader buf =new BufferedReader(new InputStreamReader(System.in));//读取键盘对象
  21.           BufferedWriter BuOut =new BufferedWriter(new OutputStreamWriter(out));//输出流
  22.           InputStream in = client.getInputStream();
  23.           BufferedReader BufR = new BufferedReader(new InputStreamReader(in));//输入流
  24.          
  25.           //读取键盘录入的内容,并写入客户端
  26.           String line = null;
  27.           while((line=buf.readLine())!=null){
  28.                   if("886".equalsIgnoreCase(line))
  29.                           break;
  30.                   BuOut.write(line);
  31.                   BuOut.newLine();
  32.                   BuOut.flush();
  33.                   fw.write("clint-send:"+line+"\r\n");                  
  34.                   fw.flush();
  35.                   
  36.                  String str= BufR.readLine();//接收服务端的回执
  37.                  System.out.println(str);
  38.                  fw.write("clint-re:"+str+"\r\n");
  39.                  fw.flush();
  40.           }
  41.           buf.close();
  42.           client.close();
  43.    }
  44. }
复制代码
服务端console

客户端console

123文件夹内sc.txt文件内容


评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

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