小宅

V1

2023/03/13阅读:21主题:默认主题

网络编程

网络编程三要素

  • ip 地址
  • 端口
  • 协议

ip

设备在网络中的唯一标识

ipv4

全球- ipv4 全球只有256 *256 * 256 * 256

ipv6

有128bit

常用命令

InetAddress 的使用

端口

协议

udp: 面向无连接

Tcp 面向连接

UDP 通信

--- demo ---

package com.itheima.scoketDemo2;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class ClientDemo {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        DatagramSocket ds = new DatagramSocket();
        while (true) {

            String s = sc.nextLine();
            if"886".equals(s) ) {
               break;
            }
            byte[] bytes = s.getBytes();
            InetAddress address = InetAddress.getByName("127.0.0.1");
            int port = 10000;
            DatagramPacket dp= new DatagramPacket(bytes, bytes.length, address, port);

            ds.send(dp);
        }

        ds.close();

    }
}

package com.itheima.scoketDemo2;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket(10000);

        while (true) {
            byte[] bytes = new byte[1024];

            DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

            ds.receive(dp);

            byte[] data = dp.getData();
            int length = dp.getLength();

            System.out.println(new String(data, 0, length));
        }

    }
}


udp 的三种通信方法

  • 单播
  • 组播(多播)
  • 广播

组播demo

Tcp 通信

--- demo

TCp 三次握手

TCP 四次挥手

TCP 文件上传

服务端

package com.itheima.scoketDemo4;

import java.io.*;
import java.net.*;

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(10000);

        Socket accept = ss.accept();
        // 网络中的流, 从客户端读取
        BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());
        // 本地中的io 流, 把数据写到本地
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/Users/lh/develop/mydate/ServerDir/copy.jpg"));

        int b;
        while((b= bis.read()) != -1) {
            bos.write(b);
        }
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));

        bw.write("上传成功");
        bw.newLine();
        bw.flush();

        accept.close();
        ss.close();
        bos.close();
    }
}

客户端

package com.itheima.scoketDemo4;

import javax.imageio.stream.FileImageInputStream;
import java.io.*;
import java.net.Socket;
// 文件上传
public class ClientDemo {
    public static void main(String[] args) throws IOException {

        Socket socket = new Socket("127.0.0.1",10000);
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/lh/develop/mydate/ClientDir/vue.jpg"));

            // 写到服务器去- 网络中的流
        OutputStream os = socket.getOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(os);

        int b;
        while ((b = bis.read()) != -1) {

            bos.write(b); // 写到服务器去
        }
        // 代表传输完毕
        socket.shutdownOutput();

        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;
        while ((line = br.readLine())!= null) {
            System.out.println(line);
        }

        socket.close();
        bis.close();
    }
}

分类:

后端

标签:

后端

作者介绍

小宅
V1