当前位置:必发365电子游戏 > 编程 > 4.读取服务端反馈信息
4.读取服务端反馈信息
2019-12-19

客户端:

#######################################
客户端

1.劳务端点

###UploadPicClient.javapublic class UploadPicClient {    /**     * @param args     * @throws IOException      * @throws       */    public static void main(String[] args) throws IOException {        System.out.println("上传图片客户端运行......");        //1,创建socket。        Socket s = new Socket("192.168.1.223", 10007);                //2,读取源图片。        File picFile = new File("tempfile\1.jpg");        FileInputStream fis = new FileInputStream;                //3,目的是socket 输出流。        OutputStream out = s.getOutputStream();                byte[] buf = new byte[1024];                int len = 0;        while((len=fis.read!=-1){            out.write(buf,0,len);        }                //告诉服务器端图片数据发送完毕,不要等着读了。        s.shutdownOutput();                //读取上传成功字样。        InputStream in = s.getInputStream();        byte[] bufIn = new byte[1024];        int lenIn = in.read;        System.out.println(new String(bufIn,0,lenIn));                //关闭。        fis.close();        s.close();    }}

2.读取顾客端已有些图片数据

##################################################################
服务端

3.因而socket输出流将数据发给服务端

###UploadPicServer.javapublic class UploadPicServer {    /**     * @param args     * @throws IOException     */    public static void main(String[] args) throws IOException {        System.out.println("上传图片服务端运行......");        // 创建server  socket 。        ServerSocket ss = new ServerSocket(10007);        while (true) {            // 获取客户端。            Socket s = ss.accept();                        //实现多个客户端并发上传,服务器端必须启动做个线程来完成。            new Thread(new UploadPic.start();        }    }}

###UploadPic.javapublic class UploadPic implements Runnable {    private Socket s;    public UploadPic {        this.s = s;    }    @Override    public void run() {        try {            String ip = s.getInetAddress().getHostAddress();            System.out.println(ip + ".....connected");            // 读取图片数据。            InputStream in = s.getInputStream();            // 写图片数据到文件。            File dir = new File("e:\uploadpic");            if (!dir.exists {                dir.mkdir();            }            // 为了避免覆盖,通过给重名的文件进行编号。            int count = 1;            File picFile = new File(dir, ip + "(" + count + ").jpg");            while (picFile.exists {                count++;                picFile = new File(dir, ip + "(" + count + ").jpg");            }            FileOutputStream fos = new FileOutputStream;            byte[] buf = new byte[1024];            int len = 0;            while ((len = in.read != -1) {                fos.write(buf, 0, len);            }            // 给客户端一个回馈信息。            OutputStream out = s.getOutputStream();            out.write("上传成功".getBytes;            // 关闭资源。            fos.close();            s.close();        } catch (IOException e) {        }    }}

4.读取服务端反馈新闻

5.关闭

必发365电子游戏, 

得到Socket对象,new出来,结构参数:String的服务端ip,int的端口号

调用Socket对象的getOutputStream(卡塔尔(قطر‎方法,得到OutputStream输出流对象

赢得FileInputStream对象,new出来,构造参数:String的文件路线

while循环调用,条件FileInputStream对象的read(卡塔尔国方法,读取到字节数组中

巡回中,调用OutputStream输出流对象的write(卡塔尔(قطر‎方法,写入数据,参数:byte[],0,len

调用Socket对象的shutDownOutput(卡塔尔方法,文告服务端写入完毕

 

调用Socket对象的getInputStream(卡塔尔国方法,得到InputStream输入流对象

调用InputStream输入流对象的read(卡塔尔方法,读取,并打字与印刷

 

调用FileInputStream对象的close()方法

调用Socket对象的close()方法

 

服务端:

平日读取

 

抽薪止沸现身

下边包车型客车例证,一次只可以有三个顾客端服务,化解并发上传的主题材料,使用八线程管理每一种来访的客户

概念一个类PicThread,达成Runnable接口

概念布局函数,传递步向Socket对象

兑现run(卡塔尔国方法,在try-catch中抓获卓殊,符合规律读取Socket对象的流

 

 

解决文件覆盖

文件的称号接受ip+(数字卡塔尔(قطر‎,比如:192.168.1.100(2卡塔尔(英语:State of Qatar).jpg

获取ip 方法,socket.getInetAddress().getHostAddress()

首先次步向,文件名192.168.1.100.jpg

其次次跻身,判读文件已存在,文件名改成192.168.1.100(1卡塔尔(英语:State of Qatar).jpg

 

主函数字传送值格局并判别

4.读取服务端反馈信息。判定有二个参数 arg.length==1

看清是文本,况兼设有  File对象的exists(卡塔尔方法和isFile(卡塔尔(قطر‎方法

看清文件后缀,File对象的getName(卡塔尔(قطر‎.endsWith(“.jpg”卡塔尔(英语:State of Qatar)方法

认清文件大小,File对象的length(卡塔尔国方法

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

class UploadPicClient {

    /**
     * @param args
     * @throws IOException
     * @throws UnknownHostException
     */
    public static void main(String[] args) throws Exception {
        //判断参数
        if(args.length!=1){
            System.out.println("请选择一个文件");
            return;
        }
        File file=new File(args[0]);
        if(!file.exists()||!file.isFile()){
            System.out.println("请选择一个存在的文件");
            return;
        }
        if(!file.getName().endsWith(".png")||file.length()>(1024*1024)){
            System.out.println("请选择小于1M的png文件");
            return;
        }
        Socket socket = new Socket("127.0.0.1", 10001);
        OutputStream out = socket.getOutputStream();
        // 输出
        FileInputStream fileInputStream = new FileInputStream("E:/11.png");
        byte[] b = new byte[1024];
        int len = 0;
        while ((len = fileInputStream.read(b)) != -1) {
            out.write(b, 0, len);
        }
        // 通知服务端
        socket.shutdownOutput();

        // 接收反馈
        InputStream inputStream = socket.getInputStream();
        byte[] res = new byte[1024];
        len = inputStream.read(res);
        System.out.println(new String(res, 0, len));

        out.close();
        socket.close();
    }

}
/**
 * 多线程上传
 * @author taoshihan
 *
 */
class UploadPicServerThread implements Runnable {
    private Socket socket;

    public UploadPicServerThread(Socket s) {
        this.socket = s;
    }

    @Override
    public void run() {
        // 读取
        InputStream is;
        try {
            is = socket.getInputStream();

            byte[] res = new byte[1024];
            int len = 0;
            // 解决文件覆盖
            String ip = socket.getInetAddress().getHostAddress();
            int fileNum = 1;
            File file = new File(ip + ".png");
            while (file.exists()) {
                file = new File(ip + "(" + (fileNum++) + ").png");
            }
            FileOutputStream fos = new FileOutputStream(file);
            while ((len = is.read(res)) != -1) {
                fos.write(res, 0, len);
            }

            // 反馈
            OutputStream os = socket.getOutputStream();
            os.write("上传成功!".getBytes());
            is.close();
            os.close();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

// 服务端
public class UploadPicServer {

    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(10001);

        while (true) {
            Socket socket = serverSocket.accept();
            new Thread(new UploadPicServerThread(socket)).start();
        }
    }

}

必发365电子游戏 1

必发365电子游戏 2

下一篇:没有了