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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 恰巧 中级黑马   /  2016-4-23 21:44  /  862 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

7 个回复

正序浏览
没有刷新缓冲区 数据在缓存区没进入流中
回复 使用道具 举报
同学,你进JAVA班还是Android班啊?怎么还考TCP协议?
回复 使用道具 举报
pw.flush()
回复 使用道具 举报
这个是刷新的问 题吧  需要刷新流 这样才可以把数据写入进去  刷新客户端的流试试   在告诉服务器发送完毕上面刷新
回复 使用道具 举报
把pw流关了试试
回复 使用道具 举报
{:2_30:}{:2_30:}
回复 使用道具 举报
上半部分是服务器,下半部分是客户端
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马