1.网络编程三要素
1.IP地址:
**IP地址:指互联网协议地址(Internet Protocol Address),俗称IP。**要想使网络中的计算机能够进行通信,必须为每台计算机指定一个标识号,通过这个标识号来指定接受数据的计算机或者发送数据的计算机。
在TCP/IP协议中,这个标识号就是IP地址,它可以唯一标识一台计算机,目前,IP地址广泛使用的版本是IPv4,它是由4个字节大小的二进制数来表示,如:00001010000000000000000000000001。由于二进制形式表示的IP地址非常不便记忆和处理,因此通常会将IP地址写成十进制的形式,每个字节用一个十进制数字(0-255)表示,数字间用符号"."分开,如 "192.168.1.100"。
随着计算机网络规模的不断扩大,对IP地址的需求也越来越多,IPV4这种用4个字节表示的IP地址面临枯竭,因此IPv6 便应运而生了,IPv6使用16个字节表示IP地址,它所拥有的地址容量约是IPv4的8×1028倍,达到2128个(算上全零的),这样就解决了网络地址资源数量不够的问题。
说白了,IP其实就是每个设备在网络中的编号
2.端口:
网络的通信,本质上是两个进程(应用程序)的通信。每台计算机都有很多的进程,那么在网络通信时,如何区分这些进程呢?
如果说IP地址 可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)了。
3.网络通信协议
提到传输层的两个重要的高级协议,分别是UDP和TCP,其中UDP是User Datagram Protocol的简称,称为用户数据报协议,TCP是Transmission Control Protocol的简称,称为传输控制协议。
2.首先来进行IP的学习
想要对IP进行操作,就避不开要用InetAdress这个类
java
import java.net.InetAddress;
import java.net.UnknownHostException;
public class inetaddress {
public static void main(String[] args) throws UnknownHostException {
//1.获取inetAddress对象
//IP的对象,也可以说是一台电脑的对象
InetAddress address=InetAddress.getByName("192.168.50.155");
//DESKTOP-D4I5DGV 电脑名
InetAddress address1=InetAddress.getByName("DESKTOP-D4I5DGV");
System.out.println(address1);
//获取主机名
String s=address.getHostName();
System.out.println(s);
//返回文本中显示的IP字符串(获取电脑对象的IP)
String str=address.getHostAddress();
System.out.println(str);
}
}
3.UDP
1.UDP的发送信息
步骤:1.创建对象
2.打包数据
3.发送数据
4.清除缓存
java
public class SendTest {
//发送数据
public static void main(String[] args) throws IOException {
//1.创建对象
DatagramSocket ds=new DatagramSocket();
//2.打包数据
Scanner sc=new Scanner(System.in);
while (true) {
String str=sc.nextLine();
if("886".equals(str)){
break;
}
byte[] bytes=str.getBytes();
InetAddress ia=InetAddress.getByName("127.0.0.1");
int port=10086;
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,ia,port);
//3.发送数据
ds.send(dp);
}
//4.清除缓存
ds.close();
}
}
2.UDP的接受消息
步骤:
1.创建对象
2.接受消息
3.解压消息
4.释放内存
java
public class ReceiveTest {
public static void main(String[] args) throws IOException {
//接受数据
//1.创建对象
DatagramSocket ds=new DatagramSocket(10086);
//2.接受数据
byte[] bytes=new byte[1024];
DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
//while (true) {
ds.receive(dp);
//3.解压数据
byte[] data= dp.getData();
int len= dp.getLength();
InetAddress ia=dp.getAddress();
int port=dp.getPort();
System.out.println(new String(data,0,len));
// System.out.println(ia);
// System.out.println(port);
//}
//4.释放内存
ds.close();
}
}
4.UCP
考察的主要是服务器与客户端,因此我们需要做一个服务器与客户端
1.客户端
java
public class Client {
//TCP协议客户端,用来发送数据
public static void main(String[] args) throws IOException {
//1.创建socket对象
//细节:在创建对象的同时,会连接服务器,如果连接不上,则报错
Socket socket=new Socket("127.0.0.1",10006);//服务器的IP,以及链接的端口
//2.从连接通道中获取输出流
OutputStream os=socket.getOutputStream();
//写出数据
os.write("你好".getBytes());
//3.释放资源
os.close();
socket.close();
}
}
2.服务器
java
public class Server {
//TCP协议服务端,用于接受消息
public static void main(String[] args) throws IOException {
//1.创建服务器 ServerSocket
//链接的端口必须与用户端一致
ServerSocket ss=new ServerSocket(10006);
//2.监听客户端链接
Socket socket=ss.accept();
//3.从连接通道中获取输入流,读取数据
InputStream is=socket.getInputStream();
//用转换流,将字节流变成字符流
InputStreamReader isr=new InputStreamReader(is);
int b;
while(((b=isr.read()))!=-1){
System.out.print((char)b);
}
//4.释放资源
socket.close();
ss.close();
}
}