目录
知识点
1.什么是网络编程
计算机跟计算机之间通过网络进行数据传输
2.常见软件架构有哪些
CS/BS
3.通信的软件架构CS\BS的各有什么区别和优缺点
CS:客户端服务端模式需要开发客户端
BS:浏览器服务端模式不需要开发客户端
CS:适合定制专业化的办公类软件如:IDEA、网游
BS:适合移动互联网应用,可以在任何地方随时访问的系统
4.网络编程三要素分别是什么
IP、端口号、协议
5.网络编程三要素分别表示什么
IP:设备在网络中的地址,是唯一的标识
端口号:应用程序在设备中唯一的标识
协议:数据在网络中传输的规则,常见的协议有UDP、TCP、http、https、ftp
6.IPv4有什么特点
目前的主流方案,最多只有2^32次方个ip,目前已经用完了
7.IPv6有什么特点
为了解决IPv4不够用而出现的,最多有2^128次方个ip,可以为地球上的每一粒沙子都设定ip
8.现在如何解决IPv4不够的问题
利用局域网IP解决IP不够的问题
9.特殊的IP是什么
127.0.0.1(永远表示本机)
10.常见的两个CMD命令
ipconfig:查看本机IP地址
ping:检查网络是否连通
11.UDP协议
用户数据报协议(User Datagram Protocol)
UDP是面向无连接通信协议
速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据
12.TCP协议
传输控制协议TCP(Transmission Control Protocol)
TCP协议是面向连接的通信协议
速度慢,没有大小限制,数据安全
13.UDP的三种通信方式(代码实现)
单播:点对点传输
组播:组播地址224.0.0.0~239.255.255.255,其中224.0.0.0~224.0.0.255为预留的组播地址
广播:广播地址255.255.255.255
14.TCP通信程序(三次握手)
客户端向服务器发出连接请求、服务器向客户端返回响应、客户端向服务器再次发出确认信息
15.TCP通信程序(四次挥手)
客户端向服务器发出取消连接请求、服务器向客户端返回一个响应、服务器向客户端发出确认取消信息、客户端再次发送确认信息
代码实现
1.UDP单播
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class SendMessageDemo {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象
DatagramSocket ds=new DatagramSocket();
while (true) {
//打包数据
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();//输入数据
if(str.equals("886"))break;//终止发送
byte[] bytes=str.getBytes();
InetAddress address=InetAddress.getByName("127.0.0.1");
int port=10000;
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
//发送数据
ds.send(dp);
}
//释放资源
ds.close();
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ReceiveMessageDemo {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象
DatagramSocket ds = new DatagramSocket(10000);
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
while (true) {
//接受数据包
ds.receive(dp);
//解析数据包
byte[] data = dp.getData();
int len = dp.getLength();
String ip = dp.getAddress().getHostAddress();
String name = dp.getAddress().getHostName();
//打印数据包
System.out.println("ip为:" + ip + "主机名为" + name + "的人发送了数据" + new String(data, 0, len));
}
}
}
2.UDP组播
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class SendMessageDemo {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象
MulticastSocket ms=new MulticastSocket();
while (true) {
//打包数据
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();//输入数据
if(str.equals("886"))break;//终止发送
byte[] bytes=str.getBytes();
InetAddress address=InetAddress.getByName("224.0.0.1");
int port=10000;
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
//发送数据
ms.send(dp);
}
//释放资源
ms.close();
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class ReceiveMessageDemo1 {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象
MulticastSocket ms = new MulticastSocket(10000);
//将本机添加到224.0.0.1组中
InetAddress address=InetAddress.getByName("224.0.0.1");
ms.joinGroup(address);
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
while (true) {
//接收数据包
ms.receive(dp);
//解析数据包
byte[] data = dp.getData();
int len = dp.getLength();
String ip = dp.getAddress().getHostAddress();
String name = dp.getAddress().getHostName();
//打印数据包
System.out.println("ip为:" + ip + "主机名为" + name + "的人发送了数据" + new String(data, 0, len));
}
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class ReceiveMessageDemo2 {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象
MulticastSocket ms = new MulticastSocket(10000);
//将本机添加到224.0.0.1组中
InetAddress address=InetAddress.getByName("224.0.0.1");
ms.joinGroup(address);
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
while (true) {
//接收数据包
ms.receive(dp);
//解析数据包
byte[] data = dp.getData();
int len = dp.getLength();
String ip = dp.getAddress().getHostAddress();
String name = dp.getAddress().getHostName();
//打印数据包
System.out.println("ip为:" + ip + "主机名为" + name + "的人发送了数据" + new String(data, 0, len));
}
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class ReceiveMessageDemo3 {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象
MulticastSocket ms = new MulticastSocket(10000);
//将本机添加到224.0.0.1组中
InetAddress address=InetAddress.getByName("224.0.0.1");
ms.joinGroup(address);
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
while (true) {
//接收数据包
ms.receive(dp);
//解析数据包
byte[] data = dp.getData();
int len = dp.getLength();
String ip = dp.getAddress().getHostAddress();
String name = dp.getAddress().getHostName();
//打印数据包
System.out.println("ip为:" + ip + "主机名为" + name + "的人发送了数据" + new String(data, 0, len));
}
}
}
3.UDP广播
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class SendMessageDemo {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象
DatagramSocket ds=new DatagramSocket();
while (true) {
//打包数据
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();//输入数据
if(str.equals("886"))break;//终止发送
byte[] bytes=str.getBytes();
InetAddress address=InetAddress.getByName("255.255.255.255");
int port=10000;
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
//发送数据
ds.send(dp);
}
//释放资源
ds.close();
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ReceiveMessageDemo {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象
DatagramSocket ds = new DatagramSocket(10000);
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
while (true) {
//接受数据包
ds.receive(dp);
//解析数据包
byte[] data = dp.getData();
int len = dp.getLength();
String ip = dp.getAddress().getHostAddress();
String name = dp.getAddress().getHostName();
//打印数据包
System.out.println("ip为:" + ip + "主机名为" + name + "的人发送了数据" + new String(data, 0, len));
}
}
}
4.TCP
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
//创建ServerSocket对象
ServerSocket ss=new ServerSocket(10000);
//监听客户端连接
Socket socket=ss.accept();
//中连接通道中获取输入流读取数据
InputStream is=socket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
int b;
while ((b=br.read())!=-1){
System.out.print((char)b);
}
//释放资源
is.close();
socket.close();
}
}
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
//创建Socket对象
Socket socket=new Socket("127.0.0.1",10000);
//可以从连接通道获取输出流
OutputStream os=socket.getOutputStream();
//写出数据
os.write("你好".getBytes());
//释放资源
os.close();
socket.close();
}
}