网络编程
网络编程主要用于解决计算机与计算机(手机、平板..)之间的数据传输问题。
网络编程: 不需要基于html页面就可以达到数据之间的传输。 比如: feiQ , QQ , 微信....
网页编程: 就是要基于html页面的基础上进行数据的交互的。 比如: 珍爱网、 oa(办公自动化)、 高考的报告系统...
计算机网络:
分布在不同地域 的计算机通过外部设备链接起来达到了消息互通、资源共享的效果就称作为一个计算机网络。
网络通讯的三要素:
1. IP
2. 端口号。
3. 协议.
IP
192.168.10.1
IP地址: IP地址的本质就是一个由32位的二进制数据组成的数据。 后来别人为了方便我们记忆IP地址,就把IP地址切成了4份,每份8bit. 2^8 = 0~255
00000000-00000000-00000000-00000000
IP地址 = 网络号+ 主机号。
IP地址的分类:
A类地址 =一个网络号 + 三个主机号 2^24 *单位
B类地址 =两个网络号 + 两个主机号 2^16 事业单位(学校、银行..)
C类地址= 三个网络号 + 一个主机号 2^8 私人使用..
InetAddress(IP类)
常用的获取address对象的方法:
getLocalHost() 获取本机的IP地址
getByName("IP或者主机名") 根据一个IP地址的字符串形式或者是一个主机名生成一个IP地址对象。 (用于获取别人的IP地址对象)
getHostAddress() 返回一个IP地址的字符串表示形式。
getHostName() 返回计算机的主机名。
// getLocalHost 获取本机的IP地址对象
/*
* InetAddress address = InetAddress.getLocalHost();
* System.out.println("IP地址:"+address.getHostAddress());
* System.out.println("主机名:"+address.getHostName());
*/ // 获取别人机器的IP地址对象。 // 可以根据一个IP地址的字符串形式或者是一个主机名生成一个IP地址对象。
InetAddress address = InetAddress.getByName("YIFAN");
System.out.println("IP地址:" + address.getHostAddress());
System.out.println("主机名:" + address.getHostName());
端口
端口号是没有类描述的。
端口号的范围: 0~65535
从0到1023, 系统紧密绑定于一些服务。
1024~65535 我们可以使用....
网络通讯的协议:
在java中网络通讯业称作为Socket(插座)通讯,要求通讯 的两台器都必须要安装Socket。
不同的协议就有不同 的插座(Socket)
udp通讯协议
UDP通讯协议的特点:
1. 将数据极封装为数据包,面向无连接。
2. 每个数据包大小限制在64K中
3. 因为无连接,所以不可靠
4. 因为不需要建立连接,所以速度快
5. udp 通讯是不分服务端与客户端的,只分发送端与接收端。
比如: 物管的对讲机, 飞Q聊天、 游戏...
udp协议下的Socket:
DatagramSocket (udp插座服务)
DatagramPacket (数据包类)
DatagramPacket (buf, length, address, port)
buf: 发送的数据内容
length : 发送数据内容的大小。
address : 发送的目的IP地址对象
port : 端口号。
发送端的使用步骤:
1. 建立udp的服务。
2. 准备数据,把数据封装到数据包中发送。 发送端的数据包要带上ip地址与端口号。
3. 调用udp的服务,发送数据。
4. 关闭资源。
发送端demo:
public class Demo1Sender {
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的服务
2. 准备空 的数据 包接收数据。
3. 调用udp的服务接收数据。
4. 关闭资源
接收端demo:
public class Demo1Receive { 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); // 1024
// 调用udp的服务接收数据
socket.receive(datagramPacket); // receive是一个阻塞型的方法,没有接收到数据包之前会一直等待。
// 数据实际上就是存储到了byte的自己数组中了。
System.out.println("接收端接收到的数据:"
+ new String(buf, 0, datagramPacket.getLength())); // getLength()
// 获取数据包存储了几个字节。
// 关闭资源
socket.close(); } }
以上程序 分来运行,一个在命令行 ,一个在Eclipse。
udp是一个不可靠(数据包可能会丢失)的协议
什么情况下数据包会出现丢失呢?
1.带宽不足 。
2.cpu的处理能力不足。
aaarticlea/png;base64,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*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" alt="" />
public class SafeReceive { public static void main(String[] args) throws IOException, Exception {
//建立udp的服务
DatagramSocket socket = new DatagramSocket(9090); //建立空的数据包存储数据
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length); //不断接收数据包
while(true){
socket.receive(packet);
System.out.println(new String(buf,0,packet.getLength()));
Thread.sleep(10);
}
}
}
tcp通讯协议
TCP通讯协议特点:
1. tcp是基于IO流进行数据 的传输 的,面向连接。
2. tcp进行数据传输的时候是没有大小限制的。
3. tcp是面向连接,通过三次握手的机制保证数据的完整性。 可靠协议。
4. tcp是面向连接的,所以速度慢。
5. tcp是区分客户端与服务端 的。
aaarticlea/png;base64,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" alt="" />
比如: 打电话、 QQ\feiQ的文件传输、 迅雷下载....
*/
tcp协议下的Socket:
Socket(客户端) , tcp的客户端一旦启动马上要与服务端进行连接。
ServerSocket(服务端类)
tcp的客户端使用步骤:
1. 建立tcp的客户端服务。
2. 获取到对应的流对象。
3.写出或读取数据
4. 关闭资源。
public class Demo1Clinet { 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();
}
}
//tcp的服务端
/*
java.net.BindException: 端口被占用。
ServerSocket的使用 步骤
1. 建立tcp服务端 的服务。
2. 接受客户端的连接产生一个Socket.
3. 获取对应的流对象读取或者写出数据。
4. 关闭资源。
//服务端
public class Demo1Server { public static void main(String[] args) throws Exception {
//建立Tcp的服务端,并且监听一个端口。
ServerSocket serverSocket = new ServerSocket(9090);
//接受客户端的连接
Socket socket = serverSocket.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()); //关闭资源
serverSocket.close(); } }