java的网络编程

网络编程

网络编程:java语言支持网络间的数据传输,将底层的细节封装起来了,给程序员提供了一套标准类库,方便java开发出可以进行网络通信的软件

核心问题:如何找到网络世界中的目标主机,和目标软件:找ip地址

如何安全可靠的进行数据传输

基本知识:

网络模型:
OSI参考模型:理想化的标准模型,有七层
实际使用的TCP/IP模型:
  • 应用层:各种协议规则,软件部分

  • 运输层:协议检测

  • 网络层:找ip

  • 物理链路层:硬件设备(网卡…)

通信要素:ip,端口,协议
IP:在网络世界中,表示计算机的地址
  • 局域网地址:连接路由器,由路由器自动分配ip

  • 广域网地址:家里的宽带,与外界连接

  • 本机地址:本地回环地址

端口:是计算机中运行中的程序的编号

0~1024是留给系统程序的

1024~65535是为开发的程序使用,是我们为程序定义端口号时使用的

端口不能重复,不能与已有的端口冲突

如何安全传输——通信协议:

对传输的内容,速率,出错之后的处理办法等进行的控制与制约

传输层有两个主要协议:

  • 传输控制协议TCP(Transmission Control Protocol)

    使用TCP前必须先要检测网络是否畅通,服务器是否能连接到网络

    即三次握手:第一次客户端给服务器发确保服务器能收到,第二次服务器收到给客户端发,此时客户端知道服务器能收到,然后第三次客户端再给服务器发,此时服务器也知道了自己的消息能被客户端收到

    断开流程:

    四次挥手:第一次客户端告诉服务器要断开了,第二次服务器给客户端反馈,第三次服务器把没有发完的数据给客户端,第四次客户端再通知服务器最终断开

  • 用户数据报协议UDP(User Datagram Protocol)

    将数据封装成一个一个数据报

    每个数据报的大小限制在64K内

    数据报中包含数据,源(自己电脑ip)目标(接收端ip 端口)

    发送前不需要建立连接,只管发送不管成功与否

    不够安全,但是效率高

    例如根据坐标发射导弹

    服务器与客户端:

    Socket(InetAddress address,int port)throws IOException
    //根据InetAddress对象所表示的IP地址以及端口号port发起连接。
    Socket(String host,int port)
    //域名是host。端口号为port)发起TCP连接,若成功,则创建Socket对象,否则抛出异常。
    Socket accept() throws IOException
    //等待客户端的连接请求,返回与该客户端进行通信用的Socket对象
    

    客户端:

    //创建客户端
        try {
            	//host是域名,port是端口
            	Socket socket=newSocket("192.168.124.185",7777);
                //在客户端向服务器发送一段话
                OutputStream o=socket.getOutputStream();
                String s="哈哈哈";
                o.write(s.getBytes());
            } catch (IOException e) {
            e.printStackTrace();
            System.out.println("连接服务器失败");
        }
    

    服务器:

    try {
                //创建并启动服务器
                ServerSocket so=new ServerSocket(7777);
                System.out.println("服务器启动成功");
        		//监听有没有客户端连接到服务器,监听时会阻塞程序
                Socket socket=so.accept();
                System.out.println("有客户端连接到了服务器");
                //接收客户端发送的数据
                InputStream in= socket.getInputStream();
                byte[] bytes=new byte[100];
                int size=in.read(bytes);
                String s=new String(bytes,0,size);
                System.out.println(s);
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("服务器启动失败");
            }
    

用Data在客户端和服务器之间输入输出数据:

客户端:

//创建客户端
        try {
            Socket socket=new Socket("192.168.124.185",7777);//host是域名,port是端口
            //在客户端向服务器发送一段话
            OutputStream outputStream= socket.getOutputStream();
            DataOutputStream dataOutputStream=new DataOutputStream(outputStream);//数据处理流,直接可以输出字符串
            Scanner scanner=new Scanner(System.in);
            System.out.println("客户端输入:");
            String s=scanner.next();
            dataOutputStream.writeUTF(s);
            //接收服务器发的消息
            InputStream inputStream= socket.getInputStream();
            DataInputStream dataInputStream=new DataInputStream(inputStream);
            String s1=dataInputStream.readUTF();
            System.out.println("服务器说:"+s1);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("连接服务器失败");
        }
/*
客户端输入:
xswl
服务器说:byd
*/

服务器:

try {
            //创建并启动服务器
            ServerSocket so=new ServerSocket(7777);
            System.out.println("服务器启动成功");
            Socket socket=so.accept();//监听有没有客户端连接到服务器,监听时会阻塞程序
            System.out.println("有客户端连接到了服务器");
            //接收客户端发送的数据
            InputStream inputStream= socket.getInputStream();
            DataInputStream dataInputStream=new DataInputStream(inputStream);
            String s=dataInputStream.readUTF();
            System.out.println("客户端说:"+s);
            //服务器回复消息
            OutputStream outputStream = socket.getOutputStream();
            DataOutputStream dataOutputStream=new DataOutputStream(outputStream);
            Scanner scanner=new Scanner(System.in);
            System.out.println("服务器输入:");
            String s1=scanner.next();
            dataOutputStream.writeUTF(s1);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("服务器启动失败");
        }
/*
服务器启动成功
有客户端连接到了服务器
客户端说:xswl
服务器输入:
byd
*/

你可能感兴趣的:(java,网络,开发语言)