Java网络编程

来源:互联网 发布:长沙网络招工 编辑:程序博客网 时间:2024/06/05 16:01

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    HTTP443   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 0