一、网络的相关概念
(一)网络通信
(二)网络
(三)ip地址
(四)ipv4地址分类
(五)域名
(六)端口号
(七)网络通信协议
(八)网络通信协议
(九)TCP和UDP
二、InetAddress类
(一)相关方法
package com.hspedu.api;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class API_ {
public static void main(String[] args) throws UnknownHostException {
//1.获取本机的InetAddress 对象
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost);//LAPTOP-J6E1LFVM/10.24.7.56
//2.根据指定主机名 获取InetAddress 对象
InetAddress host1 = InetAddress.getByName("LAPTOP-J6E1LFVM");
System.out.println("host1=" + host1);//host1=LAPTOP-J6E1LFVM/10.24.7.56
//3.根据域名返回InetAddress对象,比如www.baidu.com对象
InetAddress host2 = InetAddress.getByName("www.baidu.com");
System.out.println("host2=" + host2);//host2=www.baidu.com/183.232.231.174
//4.通过InetAddress 对象,获取对应主机地址
String hostAddress = host2.getHostAddress();
System.out.println("host2 对象的ip = " + hostAddress);//host2 对象的ip = 183.232.231.174
//5.通过InetAddress对象,获取对象的主机名/或者域名
String hostName = host2.getHostName();
System.out.println("host2对应的主机名/域名=" + hostName);//host2对应的主机名/域名=www.baidu.com
}
}
三、Socket
(一)基本介绍
四、TCP网络通信编程
(一)基本介绍
(二)应用案例1(使用字节流)
package com.hspedu.socket;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class SocketTCP1Server {
public static void main(String[] args) throws IOException {
//1.在本机的9999端口监听,等待连接
// 要求在本机没有其他服务在监听9999
// 这个ServerSocket 可以通过accept() 返回多个Socket【多个客户端连接服务端的并发】
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务端,在9999端口监听,等待连接");
//2.当没有客户端连接9999端口时,程序会阻塞,等待连接
// 如果有客户端连接,则会返回Socket对象,程序会继续
Socket socket = serverSocket.accept();
System.out.println("服务端 socket=" + socket.getClass());
//3.通过socket.getInputStream() 读取客户端写入到数据通道的数据,显示
InputStream inputStream = socket.getInputStream();
//4.IO读取
byte[] buf = new byte[1024];
int readLen = 0;
while((readLen = inputStream.read(buf)) != -1) {
System.out.println(new String(buf, 0, readLen));//根据读取到的实际长度,显示内容
}
//5.关闭流和socket
inputStream.close();
socket.close();
serverSocket.close();//关闭
}
}
package com.hspedu.socket;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
//客户端,发送”hello,server“给服务端
public class SocketTCP01Client {
public static void main(String[] args) throws IOException {
//1.连接服务端(ip,端口)
//连接这台这台主机的9999端口,如果连接成功,返回socket对象
Socket socket = new Socket(InetAddress.getLocalHost(),9999);
System.out.println("客户端socket返回=" + socket.getClass());
//2.连接上后,生成Socket,通过socket.getOutputStream
// 得到和socket对象关联的输出流对象
OutputStream outputStream = socket.getOutputStream();
//3.通过输出流,写入数据到数据通道
outputStream.write("hello,server".getBytes());
//4.关闭流对象和socket,必须关闭
outputStream.close();
socket.close();
System.out.println("客户端退出");
}
}
(三)应用案例3(使用字节流)
package com.hspedu.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
@SuppressWarnings({"all"})
public class SocketTCP2Server {
public static void main(String[] args) throws IOException {
//1.在本机的9999端口监听,等待连接
// 要求在本机没有其他服务在监听9999
// 这个ServerSocket 可以通过accept() 返回多个Socket【多个客户端连接服务端的并发】
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务端,在9999端口监听,等待连接");
//2.当没有客户端连接9999端口时,程序会阻塞,等待连接
// 如果有客户端连接,则会返回Socket对象,程序会继续
Socket socket = serverSocket.accept();
System.out.println("服务端 socket=" + socket.getClass());
//3.通过socket.getInputStream() 读取客户端写入到数据通道的数据,显示
InputStream inputStream = socket.getInputStream();
//4.IO读取
byte[] buf = new byte[1024];
int readLen = 0;
while((readLen = inputStream.read(buf)) != -1) {
System.out.println(new String(buf, 0, readLen));//根据读取到的实际长度,显示内容
}
//5.获取socket相关联的输出流
OutputStream outputStream = socket.getOutputStream();
outputStream.write("hello,client".getBytes());
//设置结束标准
socket.shutdownOutput();
//6.关闭流和socket
outputStream.close();//关闭输出流
inputStream.close();
socket.close();
serverSocket.close();//关闭
}
}
package com.hspedu.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
//客户端,发送”hello,server“给服务端
@SuppressWarnings({"all"})
public class SocketTCP02Client {
public static void main(String[] args) throws IOException {
//1.连接服务端(ip,端口)
//连接这台这台主机的9999端口,如果连接成功,返回socket对象
Socket socket = new Socket(InetAddress.getLocalHost(),9999);
System.out.println("客户端socket返回=" + socket.getClass());
//2.连接上后,生成Socket,通过socket.getOutputStream
// 得到和socket对象关联的输出流对象
OutputStream outputStream = socket.getOutputStream();
//3.通过输出流,写入数据到数据通道
outputStream.write("hello,server".getBytes());
//设置结束标准
socket.shutdownOutput();
//4.获取和socket关联的输入流,读取数据(字节),并显示
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int readLen = 0;
while((readLen = inputStream.read(buf)) != -1) {
System.out.println(new String(buf, 0, readLen));
}
//5.关闭流对象和socket,必须关闭
inputStream.close();//关闭
outputStream.close();
socket.close();
System.out.println("客户端退出");
}
}