服务器与客户端简单案例

学习进度到了网络编程这一块,讲真的,这个编写最简单的服务器和客户端本来还是挺简单的,就是从客户端发送给服务器一条信息,然后服务器再回你一条信息,而且老师在上课的时候把他编写的服务器开启,让我们连接上去,在里面发言还是挺有意思的,但是在下课的时候布置了一道作业,就是在客户端利用Io流读取一个文件,然后将这个文件通过客户端发送到 服务器,然后服务器在将这个文件保存到硬盘里面。好吧思路确实很明确,但是我在做的过程中却遇到了很多的问题,我先是在c盘放了图片,本来想是通过客户端读取,发送到服务器,再由服务器存储到D盘里面,但是一直出现个问题。说我的文件路径或者文件夹不对,,当时折磨了一晚上也没做出来,在第二天早晨的时候,终于出了点效果。我把客户端读取的路径放在了本项目目录下,然后将文件换成了TXT的文件,在向D盘里面写的时候,成功了! 但是当我换成jgp形式的文件的时候,还是会报文件或文件夹路径的异常!本来是想问老师的,但是老师已经开始讲解新的知识了,所以就把这个问题发到了这里,希望有哪位大神帮忙解答一下! 感激不尽!

代码如下:

先是服务器:

package com.gc.Socket.UpLoad;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;

public class UploadServer {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(8000);
        while(true) {
            Socket socket = serverSocket.accept();
            new Thread() {
                public void run() {
                    try {
                        //拿到socket的输入流读取客户端发送过来的数据
                        InputStream is = socket.getInputStream();
                        BufferedInputStream bis = new BufferedInputStream(is);
                        //得到输出流将数据写到硬盘上
                        //组装上传文件的父目录
                        File dir = new File("C:\\B");
                        if(!dir.exists()){
                            dir.mkdir();
                        }
                        //组装文件的完整路径
                        File file = new File(dir,UUID.randomUUID().toString()+".txt");
                        //写数据到文件
                        FileOutputStream fos = new FileOutputStream(file, true);
                        BufferedOutputStream bos = new BufferedOutputStream(fos);
                        //一边读一边写
                        byte[] buf = new byte[1024*8];
                        int length = -1;
                        while((length = bis.read(buf))!=-1 ){
                            bos.write(buf, 0, length);
                            bos.flush();
                        }
                        socket.shutdownOutput();
                        fos.close();
                        bos.close();
                        socket.close();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }.start();
        }
    }
}

然后是客户端:

package com.gc.Socket.UpLoad;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class UploadClient {

    public static void main(String[] args) {
        try {
            // 上传图片的路径
            File file = new File("a.txt");
            System.out.println("---------");
            FileInputStream fis = new FileInputStream(file);
            // 缓冲字节流读取上传的图片文件
            System.out.println("---------");
            BufferedInputStream bis = new BufferedInputStream(fis);
            // 将图片的字节流传送给服务端
            Socket socket = new Socket("192.168.1.53", 8000);       
            OutputStream out = socket.getOutputStream();
            BufferedOutputStream bos = new BufferedOutputStream(out);
            // 缓存数组
            byte[] buf = new byte[1024 * 8];
            // 一边读图片文件,一边往服务器端写
            int length = -1;
            while ((length = bis.read(buf)) != -1) {
                bos.write(buf, 0, length);
            }

            //有个小问题
            //socket.shutdownOutput();  关闭socket的输出流
            //socket.shutdownInput();   关闭socket的输入流

            fis.close();
            bis.close();
            bos.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

程序里面哪里出现了问题?希望大神们前来解惑!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值