Java网络编程

1.计算机网络的基础知识

计算机网络:指分布在不同地域的计算机,通过外部设备连接起来,实现了资源共享与数据传输的计算机系统。

IP地址

Internet上的每台主机(Host)都有一个唯一的IP地址。

IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间 
用句点隔开。例如159.226.1.1。(四个字节)

IP地址类别

IP地址是由网络号和主机号组成

A类地址: 8位网络位,24位主机位

B类地址: 16位网络位,16位主机位

C类地址: 24位网络位,8位主机位

特殊的IP地址

127.0.0.1 表示 本机回环地址

Port地址

  如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP 
  地址的端口 可以有65536(即:2^16)个之多! 

  端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(2^16-1)。 

Port分类(0~65535)

公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。 

注册端口(RegisteredPorts):从1024到49151。它们松散地绑定于一些服务。

动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。

常用端口

21    FTP        
80    HTTP
443   HTTPS

**TCP:**Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、
基于字节流的运输层(Transport layer)通信协议。
特点:

面向连接的协议,数据传输必须要建立连接,所以在TCP中需要连接时间。

传输数据大小无限制,一旦连接建立,双方可以按统一的格式传输大的数据。

一个可靠的协议,确保接收方完全正确地获取发送方所发送的全部数据。

UDP: User Datagram Protocol的简称, 中文名是用户数据包协议,是 OSI 参考模型中一种无连接
的传输层协议,提供面向事务的简单不可靠信息传送服务。
特点:

每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。

UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。

UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

2.Java网络编程

Java网络编程

Java网络编程其实就是实现局域网或互联网之间的数据通信(数据传输)。

Java网络编程要素

通过前面的知识,大家知道了计算机之间的数据传输需要三个要素。
IP(主机名)、端口、协议

Java是OOP语言,所以将其封装为特定的对象,java.net.*

对象映射

IP       主机名   (InetAddress)
端口   数字标识   不用封装为对象   

InetAddress

InetAddress  此类表示互联网协议 (IP) 地址。

功能

getLocalHost()  获取本机的IP地址

getHostAddress()   返回一个IP地址的字符串表示形式。

getHostName()   返回计算机的主机名。

getByName(String host)  根据一个IP地址的字符串形式或者是一个主机名生成一个IP地址对象。  
(用于获取别人的IP地址对象)

getAllByName(String host)   找出域名对应的IP

特点

使用getByName(String host)通过一个IP地址找主机时,如果IP和Address没有对应在公网上, 
那么该IP解析不了对应的地址,而且显示为对应IP且查询很慢。

可以getByName(String host)找出域名对应的IP,getAllByName()可以获取多个地址。

(1)UDP通讯

UDP通讯协议的特点:

1. 将数据极封装为数据包,面向无连接。

2. 每个数据包大小限制在64K中

3. 因为无连接,所以不可靠

4. 因为不需要建立连接,所以速度快

5. udp 通讯是不分服务端与客户端的,只分发送端与接收端。

udp协议下的Socket:

DatagramSocket(udp插座服务)
DatagramPacket(数据包类)

DatagramPacket(buf, length, address, port)

    buf: 发送的数据内容
    length : 发送数据内容的大小。
    address : 发送的目的IP地址对象
    port : 端口号。

发送端的使用步骤:

1. 建立udp的服务。

2. 准备数据,把数据封装到数据包中发送。 发送端的数据包要带上ip地址与端口号。

3. 调用udp的服务,发送数据。

4. 关闭资源。

如:

public static void main(String[] args) throws IOException {

        //建立udp的服务
        DatagramSocket datagramSocket = new DatagramSocket();
        //准备数据,把数据封装到数据包中。
        String data = "这是一个UDP数据包!";
        //创建一个数据包
        DatagramPacket Packet = new DatagramPacket(data.getBytes(), data.getBytes().length, InetAddress.getLocalHost(), 9090);

        //调用udp的服务发送数据包
        datagramSocket.send(Packet);
        //关闭资源----实际上就是释放占用的端口号
        datagramSocket.close();
    }

接收端的使用步骤:

  1. 建立udp的服务
    1. 准备空 的数据 包接收数据。
    2. 调用udp的服务接收数据。
    3. 关闭资源

如:

public static void main(String[] args) throws IOException {

        //建立udp的服务,并且要监听一个端口。
        DatagramSocket  socket = new DatagramSocket(9090);

        //准备空的数据包用于存放数据。
        byte[] buf = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);

        //调用udp的服务接收数据
        socket.receive(datagramPacket);//receive是一个阻塞型的方法,没有接收到数据包之前会一直等待。数据实际上就是存储到了byte的数组中了。

        System.out.println("接收端接收到的数据: "+ new String(buf,0,datagramPacket.getLength()));//getLength() 获取数据包存储了几个字节。

        //关闭资源
        socket.close();
    }

(2)TCP通讯

TCP通讯协议特点:

1. tcp是基于IO流进行数据 的传输 的,面向连接。

2. tcp进行数据传输的时候是没有大小限制的。

3. tcp是面向连接,通过三次握手的机制保证数据的完整性。 可靠协议。

4. tcp是面向连接的,所以速度慢。

5. tcp是区分客户端与服务端 的。

tcp协议下的Socket:

Socket(客户端) , tcp的客户端一旦启动马上要与服务端进行连接。

ServerSocket(服务端类)

tcp的客户端使用步骤:

1. 建立tcp的客户端服务。

2. 获取到对应的流对象。

3. 写出或读取数据

4. 关闭资源。

如:

public static void main(String[] args) throws IOException {

        //建立tcp的服务
        Socket socket = new Socket(InetAddress.getLocalHost(),9090);
        //获取到Socket的输出流对象
        OutputStream outputStream = socket.getOutputStream();
        //利用输出流对象把数据写出即可。
        outputStream.write("我是客户端".getBytes());

        //获取到输入流对象,读取服务端回送的数据。
        InputStream inputStream = socket.getInputStream();
        byte[] buf = new byte[1024];
        int length = inputStream.read(buf);
        System.out.println("服务端发来的数据是:"+ new String(buf,0,length));

        //关闭资源
        socket.close();
    }

ServerSocket的使用 步骤
1. 建立tcp服务端 的服务。
2. 接受客户端的连接产生一个Socket.
3. 获取对应的流对象读取或者写出数据。
4. 关闭资源。

如:

public static void main(String[] args) throws IOException {

        //建立tcp的服务端,并且监听一个端口。
        ServerSocket serverSoket = new ServerSocket(9090);
        //接收客户端的连接
        Socket socket = serverSoket.accept(); //accept() 接收客户端的连接,该方法也是一个阻塞型的方法,没有客户端与其连接时,会一直阻塞下去。

        //获取输入流对象,读取客户端发送的内容
        InputStream inputStream = socket.getInputStream();
        byte[] buf = new byte[1024];
        int length = 0;
        length = inputStream.read(buf);
        System.out.println("服务端接收:"+ new String(buf, 0 , length));;


        //获取socket输出流对象,向客户端发送数据
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("我是服务端!".getBytes());

        //关闭资源
        serverSoket.close();
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值