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(); }
接收端的使用步骤:
- 建立udp的服务
- 准备空 的数据 包接收数据。
- 调用udp的服务接收数据。
- 关闭资源
如:
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
- 【网络编程】JAVA网络编程
- java网络编程:网络基本概念
- Java网络编程-UDP编程
- Java 高层网络编程
- Java网络编程2
- Java网络编程3
- Java网络编程4
- Java网络服务器编程
- java网络编程1
- java网络编程2
- JAVA网络编程
- Java网络服务器编程
- java网络编程
- Java 高层网络编程
- Java 高层网络编程
- Java网络服务器编程
- Java网络编程
- JAVA网络编程
- js延迟加载
- HDU1176 免费馅饼 数塔DP
- 3章数据链路层
- 转载AFNetworking源码解析(三)
- 1036. Boys vs Girls (25)
- Java网络编程
- 懒加载的动态数组添加object需要self. 不能使用_
- STL的copy真是是做的了极致的效率
- LeetCode_Jump Game
- android H264码流中的SPS获取
- 数据结构例程——归并排序
- 传奇编程大牛
- HDOJ 1000 java版
- 寻找相同元素的指针