欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA笔记18 网络编程

程序员文章站 2022-03-05 15:42:24
...

网络编程基本概念

/*
网络编程:就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换
OSI参考模型有7层:
物理层  数据链路层  网络层  传输层   会话层  表示层  应用层

IP:标识一台计算机的唯一性
IP的由来:我们计算机识别的是二进制
网络编程的三要素:IP(确定某个计算机)
A:IntAddress:
网络中设备的标识,不易记忆,可用主机名
B:端口,确定一个应用
用于标识进程的逻辑地址,不同进程的标识
C:传输协议
通讯的规则常见协议(UDP TCP)
Socket(套接字=IP+端口)
我们Java提供了一个类来描述IP
*/
InetAddress address  =  InetAddress.getByName
//获取ip
String hostName  = address.getHostAddress
//获取主机名
InetAddress localHost = InetAddress.getLocalHost();
 //通过getLocalHost() 获取InetAddress对象
String hostName1 = localHost.getHostName();
     System.out.println(hostName1);
String hostAddress = localHost.getHostAddress();
    System.out.println(hostAddress);

UDP

/*
UDP
将数据源和目的封装成数据包中
每个数据包的大小限制在64k
不可靠协议,不需建立连接
Java针对UDP协议提供了一个socket
DatagramSocket()此类表示用来发送和接受数据报包的套接字
DatagramSocket()
构造数据报包套接字并将其绑定到本地主机上任何可用的端口
*/
//发送数据
public class UDPClient {
    public static void main(String[] args) throws IOException {
        //创建客户的Scoket
        DatagramSocket socket = new DatagramSocket();
        //创建数据报包
        //发送的数据报包里面要放的数据 :对方的IP和端口。以及你要发送的数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要发送的数据");
        while (scanner.hasNextLine()){
            System.out.println("请输入你要发送的数据");
            String s = scanner.nextLine();
            if (s.equals("886")) {
                break;
            }
            byte[] bytes = s.getBytes();
            DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.11.123"), 9999);

            socket.send(datagramPacket);
        }
        socket.close();
    }
}

//接收数据
public class UDPServer {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(9999);//暴露端口号
        System.out.println("服务器已经开启,等待连接...");
        while (true){
            //创建一个空的数据报包
            DatagramPacket datagramPacket = new DatagramPacket(new byte[1024], 1024);

            socket.receive(datagramPacket);//阻塞式的方法,等待接收客户端发来的数报包
            //从数据报包里面去数据
            byte[] data = datagramPacket.getData();
            int length = datagramPacket.getLength();
            //取出发送者ip
            String ip = datagramPacket.getAddress().getHostAddress();

            System.out.println(ip + "给你发来:" + new String(data, 0, length));
        }


        //socket.close();
    }
}

TCP

//子网掩码:用来判断两个IP是不是在同一个子网里面
//TCP协议:两端必须建立,连接,属于可靠协议,发送数据大小无限制,效率低一些
//java针对TCP协议提供了相应的socket
//服务端socket  serversocket
//客户端的socket 
Socket s  =  new Socket("192.168.11.56",8888)
//参1.服务端IP,参数2,服务端端口
//发送数据
 //获取通道中的流
 Outputstream  out =  s.getoutputstream();
 out.write("你好".getBytes());    
 s.close();



//服务端
serversocket s =  new serversocket(8888)
//侦听 客户端的连接
 System.out.println("服务器开启.....");
 socket s = s.accept();//阻塞式方法,会阻塞在这里,等待连接
InputStream in = s.getinputstream();
bytes[] bytes = new byte[1024];
int len = in.read(bytes);
String s =  new String(bytes,0,len);
sout(s);

  

TCP服务端,客户端互相发消息

public class F {  //服务端
    public static void main(String[] args) throws IOException {
        ServerSocket socket = new ServerSocket(6666);
        System.out.println("等待.........");
        Socket accept = socket.accept(); //阻塞
        InputStream in = accept.getInputStream();
        byte[] bytes = new byte[1024];
        int read = in.read(bytes);
        String s = new String(bytes,0,read);
        System.out.println(s);

         //获取客户端的IP
       String s1 = accept.getInetAddress().getHostAddress();
       System.out.println(s1+"发来一条消息"+":"+new String(bytes,0,read));
        //给客户端发消息
        OutputStream out = accept.getOutputStream();
        out.write("客户端我已收到你的消息".getBytes());
        socket.close();
    }
}


public class E {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("192.168.11.56",6666);
        OutputStream out = socket.getOutputStream();
        out.write("服务端你好".getBytes());


        //读取服务端的反馈
        InputStream in = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int read = in.read(bytes); //阻塞方法
        String s = new String(bytes,0,read);
        System.out.println("反馈");
        System.out.println(s);
        socket.close();
    }
}

TCP客户端键盘录入服务器控制台输出

public class H { //服务端
    public static void main(String[] args) throws IOException {
        ServerSocket socket = new ServerSocket(8888);
        System.out.println("等待.........");
        Socket accept = socket.accept(); //阻塞
        InputStream in = accept.getInputStream();
        byte[] bytes = new byte[1024];
        int read = in.read(bytes);
        String s = new String(bytes, 0, read);
        System.out.println("客户端我已收到"+":"+s);

    }
}

public class G {
    //客户端键盘录入服务器控制台输出
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("192.168.11.56",8888);
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入");
        String s = scanner.nextLine();
        OutputStream out = socket.getOutputStream();
        out.write(s.getBytes());

    }
}

TCP客户端键盘录入服务器写到文本文件

public class J {
    public static void main(String[] args) throws IOException {
        ServerSocket socket = new ServerSocket(888);
        System.out.println("等待........");
        Socket accept = socket.accept(); //阻塞
        InputStream in = accept.getInputStream();
      //byte[] bytes = new byte[1024];
      //int read = in.read(bytes);
      //String s = new String(bytes, 0, read);
      //FileOutputStream stream = new FileOutputStream("a.txt");
      //stream.write(s.getBytes());
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));//包装为高效字符流
        BufferedWriter writer = new BufferedWriter(new FileWriter("a.txt"));
        String a =null;
        while((a=reader.readLine())!=null)){
                writer.write(a);
                writer.newLine();
                writer.flush();
            }
            socket.close();
        }
    }
}

public class I {
    public static void main(String[] args) throws IOException {
        //客户端键盘录入服务器写到文本文件
        Socket socket = new Socket("192.168.11.56",888);
        System.out.println("请输入");
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        OutputStream out = socket.getOutputStream();
        out.write(s.getBytes());

    }
}

TCP客户端读取文本文件服务器控制台输出

public class K {
    public static void main(String[] args) throws IOException {
        //客户端读取文本文件服务器控制台输出
        Socket socket = new Socket("192.168.11.56",9999);
        OutputStream out = socket.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        BufferedReader reader = new BufferedReader(new FileReader("a.txt"));
        String a = null;
        while((a=reader.readLine())!=null){
            writer.write(a);
            writer.newLine();
            writer.flush();
        }
        socket.close();
    }
}
public class L{
    public static void main(String[] args) throws IOException {
        ServerSocket socket = new ServerSocket(9999);
        System.out.println("等待........");
        Socket accept = socket.accept();
        InputStream in = accept.getInputStream();
     // byte[] bytes = new byte[1024];
     // int read = in.read(bytes);
     // String s = new String(bytes, 0, read);
     // System.out.println(s);
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String s = reader.readLine();
        System.out.println(s);
        socket.close();
    }
}

TCP给服务上传一个文本文件

public class M {
    public static void main(String[] args) throws IOException {
        //给服务上传一个文本文件
        Socket socket = new Socket("192.168.11.56", 1111);
        OutputStream out = socket.getOutputStream();
        //InputStream in = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new FileReader("a.txt"));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        String a = null;
        while ((a=reader.readLine())!=null){
            writer.write(a);
            writer.newLine();
            writer.flush();
        }
        socket.close();
        reader.close();
    }
}

public class N {
    public static void main(String[] args) throws IOException {
        ServerSocket socket = new ServerSocket(1111);
        System.out.println("等待........");
        Socket accept = socket.accept();
        InputStream in = accept.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        BufferedWriter writer = new BufferedWriter(new FileWriter("aa.txt"));
        String line = null;
        while ((line=reader.readLine())!=null){
            writer.write(line);
            writer.newLine();
            writer.flush();
        }
        writer.close();
    }
}