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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄玉昆 于 2013-3-10 16:56 编辑
  1. /*
  2. TCP赋值文件
  3. */

  4. import java.io.*;
  5. import java.net.*;

  6. //客户端
  7. class CopyClient
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 //定义全局变量
  12.                 Socket s = null;
  13.                 try
  14.                 {
  15.                         s = new Socket("192.168.1.101",10003);
  16.                 }
  17.                 catch (IOException e)
  18.                 {
  19.                         throw new RuntimeException("创建连接失败");
  20.                 }
  21.                 BufferedReader bufr = null;
  22.                 try
  23.                 {
  24.                         //创建读取流,读取指定文件
  25.                         bufr = new BufferedReader(new FileReader("D:\\File\\udp.java"));
  26.                         //创建写入缓冲区,写入网络输出流中
  27.                         BufferedWriter bufOut =
  28.                                 new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  29.                         //读取文本,并写入流中
  30.                         String line = null;
  31.                         while((line=bufr.readLine())!=null)
  32.                         {
  33.                                 bufOut.write(line);
  34.                                 bufOut.newLine();
  35.                                 bufOut.flush();
  36.                         }
  37.                         //关闭客户端的输出流。
  38.                         s.shutdownOutput();
  39.                         //创建读取流,读取网络输入流
  40.                         BufferedReader bufIn =
  41.                                 new BufferedReader(new InputStreamReader(s.getInputStream()));
  42.                         //读取反馈信息
  43.                         String str = bufIn.readLine();//应该是这出问题了-------------------------------------------------《《《《《《这里
  44.                         System.out.println(str);
  45.                 }
  46.                 catch (IOException e)
  47.                 {
  48.                         throw new RuntimeException("发送失败");
  49.                 }
  50.                 //关闭流资源
  51.                 finally
  52.                 {
  53.                         try
  54.                         {
  55.                                 if(bufr!=null)
  56.                                         bufr.close();
  57.                                 s.close();
  58.                         }
  59.                         catch (IOException e)
  60.                         {
  61.                                 throw new RuntimeException("资源关闭失败");
  62.                         }
  63.                 }
  64.         }
  65. }

  66. //服务端
  67. class CopyServer
  68. {
  69.         public static void main(String[] args)
  70.         {
  71.                 //定义全局变量
  72.                 ServerSocket ss = null;
  73.                 Socket s= null;
  74.                 try
  75.                 {
  76.                         //创建服务,接收客户端数据
  77.                         ss = new ServerSocket(10003);
  78.                         s= ss.accept();
  79.                         String ip = s.getInetAddress().getHostAddress();
  80.                         System.out.println(ip+"....connected");
  81.                 }
  82.                 catch (IOException e)
  83.                 {
  84.                         throw new RuntimeException("连接失败");
  85.                 }
  86.                 BufferedWriter bufw = null;
  87.                 try
  88.                 {
  89.                         //创建写入流
  90.                         bufw = new BufferedWriter(new FileWriter("server.txt"));
  91.                         //创建读取流
  92.                         BufferedReader bufIn =
  93.                                 new BufferedReader(new InputStreamReader(s.getInputStream()));
  94.                         String line = null;
  95.                         //读取网络输入流数据
  96.                         while((line=bufIn.readLine())!=null)
  97.                         {
  98.                                 bufw.write(line);
  99.                                 bufw.newLine();
  100.                                 bufw.flush();
  101.                         }
  102.                         //创建写入流,反馈给客户端信息
  103.                         BufferedWriter bufOut =
  104.                                 new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  105.                         bufOut.write("发送成功");

  106.                 }
  107.                 catch (IOException e)
  108.                 {
  109.                         throw new RuntimeException("发送失败");
  110.                 }
  111.                 //关闭流资源
  112.                 finally
  113.                 {
  114.                         try
  115.                         {
  116.                                 if(bufw!=null)
  117.                                         bufw.close();
  118.                                 s.close();
  119.                                 ss.close();
  120.                         }
  121.                         catch (IOException e)
  122.                         {
  123.                                 throw new RuntimeException("资源关闭失败");
  124.                         }
  125.                 }
  126.         }
  127. }
复制代码
最后打印结果是null。请大家帮忙解答,谢谢
问题已解决,谢谢大家的回答

10 个回复

正序浏览
谢谢大家的解答
回复 使用道具 举报
戴乾刚 发表于 2013-3-10 17:38
write方法是写到buffer缓冲区中,通过flush方法将数据刷新到Socket流中

你关的bufw,不是bufOut

谢谢解答
回复 使用道具 举报
黄玉昆 黑马帝 2013-3-10 19:58:41
9#
张学林 发表于 2013-3-10 17:01
不一样的流啊
     BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s
             ...

谢谢解答
回复 使用道具 举报
客服端读取反馈信息后,socket服务才关闭的

评分

参与人数 1黑马币 +12 收起 理由
黄玉昆 + 12 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 戴乾刚 于 2013-3-10 17:45 编辑
黄玉昆 发表于 2013-3-10 16:58
我下面已经关闭流了,为什么写入缓存的没有刷新呢?是不是Socket中的输出流不提供刷新呢? ...

write方法是写到buffer缓冲区中,通过flush方法将数据刷新到Socket流中

你关的bufw,不是bufOut

如果直接关Socket对象,那么将数据目的Socket流(也就是客户端的数据源)也给关了
回复 使用道具 举报
黄玉昆 发表于 2013-3-10 16:59
我下面已经关闭流了,为什么写入缓存的没有刷新呢?是不是Socket中的输出流不提供刷新呢? ...

不一样的流啊
     BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s
                                        .getOutputStream()));
                        bufOut.write("发送成功");
                        bufOut.flush();//这里没有刷新或是不刷新,直接在finally里关流

这个是写入流,如果关Socket流,它还向哪里刷呢
回复 使用道具 举报
戴乾刚 发表于 2013-3-10 16:37
在服务端的" bufOut.write("发送成功");"后面刷新一下,write只是写到缓冲区中

我下面已经关闭流了,为什么写入缓存的没有刷新呢?是不是Socket中的输出流不提供刷新呢?
回复 使用道具 举报
张学林 发表于 2013-3-10 16:04
/*
TCP赋值文件
*/

我下面已经关闭流了,为什么写入缓存的没有刷新呢?是不是Socket中的输出流不提供刷新呢?
回复 使用道具 举报
  1. /*

  2. TCP赋值文件

  3. */


  4. import java.io.*;

  5. import java.net.*;


  6. //客户端

  7. class CopyClient

  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 //定义全局变量
  12.                 Socket s = null;
  13.                 try
  14.                 {
  15.                         s = new Socket("127.0.0.1",10003);
  16.                 }
  17.                 catch (IOException e)
  18.                 {
  19.                         throw new RuntimeException("创建连接失败");
  20.                 }
  21.                 BufferedReader bufr = null;
  22.                 try
  23.                 {
  24.                         //创建读取流,读取指定文件
  25.                         bufr = new BufferedReader(new FileReader("Demo.java"));

  26.                         //创建写入缓冲区,写入网络输出流中
  27.                         BufferedWriter bufOut =
  28.                                 new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

  29.                         //读取文本,并写入流中
  30.                         String line = null;
  31.                         while((line=bufr.readLine())!=null)
  32.                         {
  33.                                 bufOut.write(line);
  34.                                 bufOut.newLine();
  35.                                 bufOut.flush();
  36.                         }
  37.                         //关闭客户端的输出流。
  38.                         s.shutdownOutput();
  39.                         //创建读取流,读取网络输入流
  40.                         BufferedReader bufIn =
  41.                                 new BufferedReader(new InputStreamReader(s.getInputStream()));
  42.                         //读取反馈信息
  43.                         String str = bufIn.readLine();//应该是这出问题了-------------------------------------------------《《《《《《这里
  44.                         System.out.println(str);
  45.                 }
  46.                 catch (IOException e)
  47.                 {
  48.                         throw new RuntimeException("发送失败");
  49.                 }
  50.                 //关闭流资源
  51.                 finally
  52.                 {
  53.                         try
  54.                         {
  55.                                 if(bufr!=null)
  56.                                         bufr.close();
  57.                                 s.close();
  58.                         }
  59.                         catch (IOException e)
  60.                         {
  61.                                 throw new RuntimeException("资源关闭失败");
  62.                         }
  63.                 }
  64.         }
  65. }


  66. //服务端

  67. class CopyServer
  68. {
  69.         public static void main(String[] args)
  70.         {
  71.                 //定义全局变量
  72.                 ServerSocket ss = null;
  73.                 Socket s= null;
  74.                 try
  75.                 {
  76.                         //创建服务,接收客户端数据
  77.                         ss = new ServerSocket(10003);
  78.                         s= ss.accept();
  79.                         String ip = s.getInetAddress().getHostAddress();
  80.                         System.out.println(ip+"....connected");
  81.                 }
  82.                 catch (IOException e)
  83.                 {
  84.                         throw new RuntimeException("连接失败");
  85.                 }
  86.                 BufferedWriter bufw = null;
  87.                 try
  88.                 {
  89.                         //创建写入流
  90.                         bufw = new BufferedWriter(new FileWriter("server.txt"));
  91.                         //创建读取流
  92.                         BufferedReader bufIn =
  93.                                 new BufferedReader(new InputStreamReader(s.getInputStream()));
  94.                         String line = null;
  95.                         //读取网络输入流数据
  96.                         while((line=bufIn.readLine())!=null)
  97.                         {
  98.                                 bufw.write(line);
  99.                                 bufw.newLine();
  100.                                 bufw.flush();
  101.                         }
  102.                         //创建写入流,反馈给客户端信息
  103.                         BufferedWriter bufOut =
  104.                                 new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  105.                         bufOut.write("发送成功");
  106.                                                 bufOut.flush();//---------------------------------此处刷新一下!!
  107.                 }
  108.                 catch (IOException e)
  109.                 {
  110.                         throw new RuntimeException("发送失败");
  111.                 }
  112.                 //关闭流资源
  113.                 finally
  114.                 {
  115.                         try
  116.                         {
  117.                                 if(bufw!=null)
  118.                                         bufw.close();
  119.                                 s.close();
  120.                                 ss.close();
  121.                         }
  122.                         catch (IOException e)
  123.                         {
  124.                                 throw new RuntimeException("资源关闭失败");
  125.                         }
  126.                 }
  127.         }
  128. }
复制代码
在服务端的" bufOut.write("发送成功");"后面刷新一下,write只是写到缓冲区中

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 张学林 于 2013-3-10 16:06 编辑

/*
TCP赋值文件
*/

import java.io.*;
import java.net.*;

//客户端
public class CopyClient {
        public static void main(String[] args) {
                // 定义全局变量
                Socket s = null;
                try {
                        s = new Socket("127.0.0.1", 10003);
                } catch (IOException e) {
                        throw new RuntimeException("创建连接失败");
                }
                BufferedReader bufr = null;
                try {
                        // 创建读取流,读取指定文件
                        bufr = new BufferedReader(new FileReader("C:\\6.txt"));
                        // 创建写入缓冲区,写入网络输出流中
                        BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s
                                        .getOutputStream()));
                        // 读取文本,并写入流中
                        String line = null;
                        while ((line = bufr.readLine()) != null) {
                                bufOut.write(line);
                                bufOut.newLine();
                                bufOut.flush();
                        }
                        // 关闭客户端的输出流。
                        s.shutdownOutput();
                        // 创建读取流,读取网络输入流
                        BufferedReader bufIn = new BufferedReader(new InputStreamReader(s
                                        .getInputStream()));
                        // 读取反馈信息
                        String str = bufIn.readLine();// 应该是这出问题了-------------------------------------------------《《《《《《这里
                        System.out.println(str);
                } catch (IOException e) {
                        throw new RuntimeException("发送失败");
                }
                // 关闭流资源
                finally {
                        try {
                                if (bufr != null)
                                        bufr.close();
                                s.close();
                        } catch (IOException e) {
                                throw new RuntimeException("资源关闭失败");
                        }
                }
        }
}

// 服务端
class CopyServer {
        public static void main(String[] args) {
                // 定义全局变量
                ServerSocket ss = null;
                Socket s = null;
                try {
                        // 创建服务,接收客户端数据
                        ss = new ServerSocket(10003);
                        s = ss.accept();
                        String ip = s.getInetAddress().getHostAddress();
                        System.out.println(ip + "....connected");
                } catch (IOException e) {
                        throw new RuntimeException("连接失败");
                }
                BufferedWriter bufw = null;
                try {
                        // 创建写入流
                        bufw = new BufferedWriter(new FileWriter("c:\\server.txt"));
                        // 创建读取流
                        BufferedReader bufIn = new BufferedReader(new InputStreamReader(s
                                        .getInputStream()));
                        String line = null;
                        // 读取网络输入流数据
                        while ((line = bufIn.readLine()) != null) {
                                bufw.write(line);
                                bufw.newLine();
                                bufw.flush();
                        }
                        // 创建写入流,反馈给客户端信息
                        BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s
                                        .getOutputStream()));
                        bufOut.write("发送成功");
                        bufOut.flush();//这里没有刷新或是不刷新,直接在finally里关流

                } catch (IOException e) {
                        throw new RuntimeException("发送失败");
                }
                // 关闭流资源
                finally {
                        try {
                                if (bufw != null)
                                        bufw.close();
                                s.close();
                                ss.close();
                        } catch (IOException e) {
                                throw new RuntimeException("资源关闭失败");
                        }
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

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