【网络编程、图片上传案例】

网络编程:编写基于网络的应用程序,实现网络之间的数据传输。

网络编程的三要素
    1. 通信协议: 网络中数据传输的规则
        UDP协议:面向无连接,不可靠(有可能丢失数据包)
        TCP协议:面向有连接,可靠(比较安全)
    
    2. ip地址:网络中主机的一个唯一标识
        ipv4: 占4个字节  127.0.0.1 本机的地址
        ipv6: 占16个字节
    
    3. 端口号: 计算机中某一个连接网络的应用程序
         范围:0~65535。 1024之间的端口号不建议使用
         
TCP客户端
客户端用Socket表示
public class TCPClient {
    public static void main(String[] args) throws IOException {
        //1. 建立连接
        Socket socket=new Socket("127.0.0.1",10086);
        FileInputStream fis=new FileInputStream("day11-code\\e.jpg");
        //2. 往服务端写数据
        OutputStream out = socket.getOutputStream();
        out.write("你好服务端".getBytes());
        //告诉服务端一个结束标记
        socket.shutdownOutput();
        fis.close();
        //3. 读取服务端返回的数据
        InputStream in = socket.getInputStream();
        len = in.read(bs);
        System.out.println(new String(bs,0,len));
        //4. 释放资源
        socket.close();
    }
}

TCP服务端
服务端用ServerSocket表示
public class TCPServer {
    public static void main(String[] args) throws IOException {
        //1. 建立连接
        ServerSocket server = new ServerSocket(10086);
        //2. 监听客户端Socket
        Socket socket = server.accept();
        //3. 读取客户端发过来数据
        InputStream in = socket.getInputStream();
        byte[] bs=new byte[1024];
        int len=in.read(bs);
        System.out.println(new String(bs,0,len));
      
        //4. 往客户端写回数据
        OutputStream out = socket.getOutputStream();
        out.write("图片上传成功".getBytes());

        //5.关闭客户端
        socket.close;
        //服务端资源一般不用关闭
        server.close();
    }
}
------------------------------------------------------------------------------------
图片上传案例
客户端代码
public class UpLoadClient {
    public static void main(String[] args) throws IOException {
        //1. 建立连接
        Socket socket=new Socket("127.0.0.1",10086);
        FileInputStream fis=new FileInputStream("day11-code\\e.jpg");
        //2. 往服务端写数据
        OutputStream out = socket.getOutputStream();
        byte[] bs=new byte[1024];
        int len;
        while((len=fis.read(bs))!=-1){
            out.write(bs,0,len);
        }
        //告诉服务端一个结束标记
        socket.shutdownOutput();
        fis.close();
        //3. 读取服务端返回的数据
        InputStream in = socket.getInputStream();
        len = in.read(bs);
        System.out.println(new String(bs,0,len));
        //4. 释放资源
        socket.close();
    }
}
服务端代码
public class UpLoadServer {
    public static void main(String[] args) throws IOException {
        //1. 建立连接
        ServerSocket server = new ServerSocket(10086);
        while(true){
            Socket socket = server.accept();
            new Thread(() -> {
                try {
                    //3. 读取客户端发过来数据
                    InputStream in = socket.getInputStream();
                    //服务端这边需要把读取到的图片保存在D:\\image文件夹下
                    File dir=new File("D:\\image");
                    //如果文件夹不存在,则创建改文件夹
                    if(!dir.exists()){
                        dir.mkdirs();
                    }
                    //自动生成一个文件名,利用毫秒值+随机数当做文件名。
                    long time = System.currentTimeMillis();
                    String filename=time+new Random().nextInt(1000)+"";
                    FileOutputStream fos=new FileOutputStream(new File(dir,filename+".jpg"));
                    byte[] bs=new byte[1024];
                    int len;
                    while((len=in.read(bs))!=-1){
                        fos.write(bs,0,len);
                    }
                    fos.close();
                    //4. 往客户端写回数据
                    OutputStream out = socket.getOutputStream();
                    out.write("图片上传成功".getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子丶Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值