网络编程概述(java)

网络编程概述

什么是计算机网络

​ 把不同区域的计算机(广义上的)通过通信设备和线路连接可以实现数据的传输和共享的系统。

​ 实现不同计算机之间联系,必须有介质连接。

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

​ 如何找到网络世界中的目标主机,以及目标软件是网络编程的核心问题

  • win+r cmd ipconfig 查看自己电脑的ip.

如何安全可靠的进行数据传输: 协议 规则

网络模型:

  • OSI参考模型,是一个理想化的标准模型;

  • 实际上使用的是TCP/IP网络模型

共四层:应用层(http)、运输层(协议)、网络层(IP)、物理链路层。

通信要素:IP 端口 协议

目标主机及目标软件

IP:在网络世界中,是计算机的地址(局域网地址,192.128.1.20连接到路由器,会自动分配ip。广域网地址,1.81.226.53家里宽带,与外界连接。本机地址,127.0.0.1,本地回环地址),对应的是主机

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

ip+端口 找到目标计算机以及你想要的程序。

端口号:0—65535之间,由于0-1024被一些系统程序使用所以我们开发的程序可以从1024-65535之间选择。,但是不能和已存在端口冲突

协议:安全传输----通信协议

​ 为了安全可靠的进行数据传输,需要对传输的内容,速率,出错之后的处理办法等进行控制而制定的一些规约,称为协议。

传输层主要的两种协议

  • 传输控制协议(TCP)

    使用TCP协议进行数据传输前,必须先要检测网络是否通畅,客户端是否能连接到服务器端,如果能连接到,则进行数据传输,否则,会报错,采用的是三次握手的机制(第一次客户端给服务器发送一个信息;服务器收到客户端请求后,需要给客户端做出一个反馈;客户端收到确认反馈后再一次向服务器发送一个反馈,以确保服务器知道他的反馈客户端是收到的)。断开四次挥手流程(客户端向服务器端发送了一个断开的请求;服务器端向客户端做出一个反馈;服务器端将没有发完的数据全部发送回客户端;客户端最后再向服务器端发送一个最终的断开的信号)。

    TCP是可靠的,相对UDP效率低。

  • 用户数据报协议(UDP)

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

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

    只管发送,是否成功不知道

    是不安全的但是效率高

java中两种协议下的编程

基于TCP协议的编程

服务器端

ServerSocket serverSocket=new ServerSocket(9999);
            Socket socket=serverSocket.accept();

客户端

 Socket socket = new Socket("127.0.0.1", 9999);
socket.getOutputStream();//获得输出流
socket.getInputStream();//获得输入流
基于UDP协议下的编程

特点

  • 不需要建立连接

  • 每个数据报限制在64kb

例:

package day02;//客户端

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

public class udp {
    public static void main(String[] args) {
        try {
            while (true) {
                DatagramSocket datagramSocket = new DatagramSocket();//负责发送数据报
                byte[] bytes = "你好".getBytes();//发送的数据
                DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length, InetAddress.getByName("192.168.124.25"), 9999);
                datagramSocket.send(datagramPacket);
                datagramSocket.close();
            }
        }catch (SocketException | UnknownHostException e){
            e.printStackTrace();
            System.out.println(e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
    }
}

package day02;//服务器

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

public class udpDemo {
    public static void main(String[] args) {
        try {
            DatagramSocket datagramSocket=new DatagramSocket(9999);
            //封装一个数据报对象来接收数据
            byte[] bytes=new byte[1024];//用来分装数据
            DatagramPacket datagramPacket=new DatagramPacket(bytes,0,bytes.length);
            datagramSocket.receive(datagramPacket);//真正的接收数据
            String s=new String(bytes,0, datagramPacket.getLength());//datagramPacket.getLength()实际接受到的数组长度
            System.out.println(s);
            datagramSocket.close();
        }catch (SocketException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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