黑马程序员技术交流社区

标题: 这题怎么不对呢,求大牛看看 [打印本页]

作者: 恰巧    时间: 2016-4-23 21:44
标题: 这题怎么不对呢,求大牛看看
package com.heima.exam;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 8、使用TCP协议写一个可以上传文件的服务器和客户端。
* */
public class Test8Server {

        public static void main(String[] args) throws Exception {
                //创建服务器服务
                ServerSocket ss = new ServerSocket(12345);
                Socket socket =ss.accept();//接受客户端请求
                //接收传输来的文件,写入本地
                InputStream ips =socket.getInputStream();
                OutputStream ops = new FileOutputStream("c.txt");
                //数组缓冲区
                byte[] arr = new byte[1024];
                int len = 0;
                while((len = ips.read(arr)) != -1 ){
                        ops.write(arr,0,len);
                }
                //给客户端发送成功的信息
                PrintWriter pw = new PrintWriter(socket.getOutputStream());
                pw.write("成功");
                //关流
                ss.close();
                socket.close();
                ops.close();
               
        }

}
--------------------------------------------------------------------------------------------------------------
package com.heima.exam;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

/*
* 8、使用TCP协议写一个可以上传文件的服务器和客户端。
* */
public class Test8Client {
                public static void main(String[] args) throws Exception {
                        //创建客户端socket
                        Socket socket = new Socket("127.0.0.1", 12345);
                        //读取本地本件到socket中
                        OutputStream ops = socket.getOutputStream();
                        InputStream ips = new FileInputStream("d.txt");
                        //创建大小为1024字节的数组缓冲区
                        byte[] arr = new byte[1024];
                        int len = 0;
                        //写出去
                        while((len = ips.read(arr))!=-1){
                                ops.write(arr, 0, len);
                        }
                        //传输完毕
                        socket.shutdownOutput();
                        //用于接收服务器的消息并打印到控制台
                        BufferedReader br = new BufferedReader
                                        (new InputStreamReader(socket.getInputStream()));
                        System.out.println(br.readLine());
                        //关流
                        socket.close();
                        ips.close();
                }

}


这代码运行的时候服务器发回来的“成功”字符串为什么不在控制台显示呢?显示null


作者: 恰巧    时间: 2016-4-23 21:45
上半部分是服务器,下半部分是客户端
作者: 恰巧    时间: 2016-4-24 18:12
{:2_30:}{:2_30:}
作者: wx_Zdt18Ww6    时间: 2016-4-24 21:48
把pw流关了试试
作者: 杨伟乔    时间: 2016-5-9 18:32
这个是刷新的问 题吧  需要刷新流 这样才可以把数据写入进去  刷新客户端的流试试   在告诉服务器发送完毕上面刷新
作者: cc19930915    时间: 2016-5-9 22:59
pw.flush()
作者: 一帘幽梦——    时间: 2016-5-10 21:07
同学,你进JAVA班还是Android班啊?怎么还考TCP协议?
作者: Sj改变    时间: 2016-5-17 18:52
没有刷新缓冲区 数据在缓存区没进入流中




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