黑马程序员_Socket应用

本文介绍了Java和Android开发技能培训的相关内容,包括服务端与客户端的交互实现,多用户上传图片的功能,以及详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

-------------------------------------------------android培训java培训期待与您交流!----------------------------------

一、转大写

1)服务端

ServerSocket ss = new ServerSocket(10225);

        Socket s = ss.accept();

        BufferedReader br = new BufferedReader(new InputStreamReader(

                s.getInputStream()));

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(

                s.getOutputStream()));

 

        String str = "";

        while (null != (str = br.readLine())) {

            bw.write(str.toUpperCase(), 0, str.length());

            bw.newLine();

            bw.flush();

        }

        br.close();

        bw.close();

ss.close();

2)客户端

Socket s = new Socket(InetAddress.getLocalHost(), 10225);

        BufferedReader br = new BufferedReader(new InputStreamReader(

                s.getInputStream()));

        // BufferedWriter bw=new BufferedWriter(new

        // OutputStreamWriter(s.getOutputStream()));

        PrintWriter p = new PrintWriter(s.getOutputStream(), true);// true自动刷出

        BufferedReader brI = new BufferedReader(

                new InputStreamReader(System.in));

 

        String str = "";

        while (null != (str = brI.readLine())) {

            if ("exit".equals(str))

                break;

            /*

             * bw.write(str, 0, str.length()); bw.newLine();//写入换行,使服务端可以读取继续运行

             * bw.flush();//将缓存数据刷出

             */p.println(str);// 使用PrintWriter一行搞定

            System.out.println(br.readLine());

        }

        brI.close();

        br.close();

        // bw.close();

s.close();// 此Socket关闭方法,写入流-1,使读取的一方可以读到结束,不用等待

 

二、多用户上传图片

1.服务端

ServerSocket ss=new ServerSocket(10225);

        while (true) {

            Socket s=ss.accept();

            //运行多个客户线程

            new Thread(new PicThread(s)).start();

}

2.线程类

private Socket s;

 

    public PicThread(Socket s) {

        this.s = s;

    }

    public void run() {

        int count = 1;

        try {

            InputStream is = s.getInputStream();

            PrintWriter p = new PrintWriter(s.getOutputStream());

            // 以用户Ip地址为名,用简单序号分别

            File f = new File(s.getInetAddress().getHostAddress() + "(" + count+ ")" + ".jpg");

            while (f.exists())

                f = new File(s.getInetAddress().getHostAddress() + "("

                        + (count++) + ")" + ".jpg");

            FileOutputStream fos = new FileOutputStream(f);

            byte[] b = new byte[1024];

            int len = 0;

            while (-1 != (len = is.read(b))) {

                fos.write(b, 0, len);

            }

            p.println("上传成功!");

            fos.close();

            p.close();

            is.close();

        } catch (Exception e) {

            e.printStackTrace();

        }

}

3.客户端

Socket s = new Socket(InetAddress.getLocalHost(), 10225);

        BufferedReader bf = new BufferedReader(new InputStreamReader(

                s.getInputStream()));

        OutputStream os = s.getOutputStream();

        System.out.println("请输入图片的路径——");

        BufferedReader br = new BufferedReader(

                new InputStreamReader(System.in));     

File f = new File(br.readLine());

        // 上传文件判断

        if (!(f.exists() && f.isFile())) {

            System.out.println("文件不存在或者不是一个文件");

            s.close();

            return;

        }

        if (!f.getName().endsWith(".jpg")) {

            System.out.println("请上传一张jpg格式的图片");

            s.close();

            return;

        }

        if (f.length() > 1024 * 1024 * 5) {

            System.out.println("图片文件不能大于5M");

            s.close();

            return;

        }

        // 写出文件

        FileInputStream fis = new FileInputStream(f);

        byte[] b = new byte[1024];

        int len = 0;

        while (-1 != (len = fis.read(b))) {

            os.write(b, 0, len);

        }

        // 告诉服务器那边这里读完了(停止写入数据),那边不用等着读了

        s.shutdownOutput();

        System.out.println(bf.readLine());

        fis.close();

        br.close();

        bf.close();

        os.close();

       s.close();

-------------------------------------------------android培训java培训期待与您交流!---------------------------------- 

详细请查看:http://edu.youkuaiyun.com/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值