Java-网络编程

一.网络编程应用场景:

游戏股票实时对战等等需要计算机与计算机通信的场景


二.常见的软件架构

B/S  C/S

Java-网络编程_第1张图片

           两种架构的区别与优缺点:

点击此处查看两种架构的优缺点icon-default.png?t=N6B9https://zhuanlan.zhihu.com/p/144731217

 


三.网络编程三要素:

IP:

设备在网络中的唯一标识

internet protocol

常见的ip分为两类:

IPV4

internet protocol  version4 互联网通信协议第四版Java-网络编程_第2张图片

v4不够用了 2019年11.26日已经全部分配完毕

IPV6

internet protocol  version6 互联网通信协议第六版

 Java-网络编程_第3张图片

 localhost 127.0.0.1 本机IP

常见cmd命令

win+r 输入cmd

ipconfig 查看本机ip

Java-网络编程_第4张图片

ping 检查网络是否畅通

 

Java-网络编程_第5张图片

 

 

端口号:

应用程序在网络中的唯一标识

Java-网络编程_第6张图片

 

协议:

数据在网络中传输的规则与约定 如 http  udp  tcp

目前用的是tcp/ip模型

Java-网络编程_第7张图片

 UDP协议:

经常用于网络会议  在线视频 丢失一些数据不影响

TCP协议:

下载软件  文字聊天  等不能丢失数据的情况

 Java-网络编程_第8张图片

 

InetAddress类

import java.net.InetAddress;
import java.net.UnknownHostException;

public class myip {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress name = InetAddress.getByName("198.44.173.98");
        String hostName = name.getHostName();
        System.out.println(hostName);
        /*Inetaddress下的方法  可以自己去尝试 可以获取IP啥的*/
        System.out.println(name);
    }
}

四:udp的发送与接收数据:

发送数据:

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

public class uudp {
    public static void main(String[] args) throws IOException {
        /*
        * 下面先准备好要用到信息
        * */
        String mss="你好你好";
        byte[] b1=mss.getBytes();
        InetAddress ip=InetAddress.getByName("127.0.0.1");
        int port =10086;
        /*
        * 准备打包数据
        * */

        DatagramPacket dp=new DatagramPacket(b1,b1.length,ip,port);
        //打包完毕之后
        DatagramSocket ds=new DatagramSocket();
        ds.send(dp);
        ds.close();
    }
}

接收数据:先运行接收端

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

public class uudpjieshou {
    public static void main(String[] args) throws IOException {
        /*
        *
        * 创建接收器
        * */
        DatagramSocket ds=new DatagramSocket(10086);
        //设置接收端口
        byte[] b1=new byte[15];
        DatagramPacket dp=new DatagramPacket(b1,b1.length);
        ds.receive(dp);
        /*接受数据 并且放入 dp中打包*/
        InetAddress ip = dp.getAddress();
        /*分别获取IP地址以及端口
        * */
        byte[]b2=dp.getData();
        int len=b2.length;
        int port =dp.getPort();
//打印出来数据  里面用到String的数据转换      必须先运行接收端口 才能运行发送端 否则无法运行
        System.out.println("接收到"+new String(b2,0,len)+"来自于计算机"+ip+port);
    }
}

最后测试结果:

Java-网络编程_第9张图片

 简单的聊天室:

发送端口:

package connect;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class send {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket();
        Scanner sc=new Scanner(System.in);
        while (true){
            System.out.println("您要说的话:");
            String ms=sc.next();
            if ("886".equals(ms)){
                break;
            }
            byte []b1=ms.getBytes();
            InetAddress ip=InetAddress.getByName("127.0.0.1");
            int port=1001;
            DatagramPacket dp=new DatagramPacket(b1,b1.length,ip,port);
            ds.send(dp);
        }
        ds.close();

    }
}

接收端口:

package connect;

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

public class over {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket(1001);
        byte[]m=new byte[1024];
        DatagramPacket dp=new DatagramPacket(m,m.length);
        while (true) {
            ds.receive(dp);
            byte[]b2=dp.getData();
            InetAddress ip=dp.getAddress();
            int port=dp.getPort();
            System.out.println("---"+new String(b2,0,b2.length)+"---"+"来自于"+ip+"端口"+port);
        }

    }
}

 idea对发送端设置一下

Java-网络编程_第10张图片

结果:

 Java-网络编程_第11张图片

 Java-网络编程_第12张图片

 

五: 单播 组播 广播

Java-网络编程_第13张图片单播

就是上面的例子都是单播

组播 

只是需要切换一下发送的方式  创建MulticastSocket 指定端口

以及在接收时  把本机IP加入到组播地址里 

其他操作与上面的聊天室的例子一模一样

例子看下图

Java-网络编程_第14张图片

 广播:

Java-网络编程_第15张图片

 只需要将发送端的 IP 地址切换为255.255.255.255  就会发送到局域网所有的电脑

TCP协议的发送与接收数据:

Java-网络编程_第16张图片

 服务器端

package tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss=new ServerSocket(1000);
        //服务器端口打开连接
        Socket s=ss.accept();
        //监听
        InputStream is=s.getInputStream();
        //获取输入流
        InputStreamReader isr=new InputStreamReader(is);
        //利用转换流 转换成字符流
//同时也处理了中文乱码的问题
        //也可以多加一个缓冲流 这里不理解可以看我关于Javaio流的文章
        int b;
        while ((b=isr.read())!=-1){
            System.out.println((char)b);
        }
        //循环完毕后  释放资源
        ss.close();
        s.close();
        is.close();
    }

}

客户机端

package tcp;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class custmer {
    public static void main(String[] args) throws IOException {
        Socket s=new Socket("127.0.0.1",1000);
        //连接到服务器 以及端口
        OutputStream os=s.getOutputStream();
        //创建输出流
        os.write("你好你好".getBytes());
        //发送数据到服务器
        os.close();
        s.close();
        //释放资源
    }
}

Tcp三次握手:

确保连接建立

 

Java-网络编程_第17张图片

 Tcp四次挥手:

确保连接断开

 

Java-网络编程_第18张图片

 到此基本就完成了Java网络编程

如果帮到您 麻烦您给个关注留言哈哈

你可能感兴趣的:(JAVA,网络,java)