InetAddress
java
public class InetAddress extends Object
implements SerializablegetByName(String host)通过传入主机名称来获取一个 IP 地址对象,host 可以是主机名,也可以是 IP 地址getHostName()获取主机名getHostAddress()获取 IP 地址
java
public static void main(String[] args) throws UnknownHostException {
// 创建 InetAddress 对象
InetAddress address = InetAddress.getByName("DESKTOP-R1L7T0I");
String hostName = address.getHostName();
String hostAddress = address.getHostAddress();
System.out.println(hostName);
System.out.println(hostAddress);
}
---
DESKTOP-R1L7T0I
192.168.0.108DatagramPacket
是一个数据报包,是发送端到接受端传送数据的一种形式
public final class DatagramPacket extends Object[!summary] DatagramPacket(byte[] buf, int length, InetAddress address, int port) ------ 构造方法 1 DatagramPacket(byte[] buf, int length) ------ 构造方法 2
getData ------ 从数据报包中获取到 byte[] 数据
DatagramSocket
public class DatagramSocket extends Object
implements Closeable[!summary] DatagramSocket() ------DatagramSocket 类的无参构造方法 DatagramSocket(int port) ------DataqgramSocket 类的带参构造方法 send(DatagramPacket P) ------ 发送数据 close() ------ 关闭发送端
使用 UDP 协议传输数据
java
public class UDPSendDemo { //发送端
public static void main(String[] args) throws IOException {
DatagramSocket dgss = new DatagramSocket(); //创建发送端对象
byte[] b = "我是发送端".getBytes();
int length = b.length;
InetAddress address = InetAddress.getByName("192.168.0.108"); //创建一个ip地址对象
int port = 10086; //端口号
DatagramPacket dgp = new DatagramPacket(b, length, address, port); //创建数据包
dgss.send(dgp); //调用send方法发送数据
dgss.close(); //关闭发送端
}
}java
public class UDPReceiveDemo { //接收端
public static void main(String[] args) throws IOException {
DatagramSocket dgsr = new DatagramSocket(10086); //创建接受对象
byte[] b = new byte[20];
int length = b.length;
DatagramPacket dgp = new DatagramPacket(b, length); //创建一个用于接收的数据包
dgsr.receive(dgp); //调用receive方法接收数据包
byte[] data = dgp.getData(); //解析数据包
int end = dgp.getLength();
String s = new String(data, 0, end);
System.out.println(s); //把byte[]转成String并打印
dgsr.close(); //关闭接收端
}
}
我是发送端Socket
public class Socket extends Object
implements Closeable[!summary] Socket(InetAddress address, int port) ------ 构造方法 1 Socket(String host, int port) ------ 构造方法 2
getOutputStream() ------ 返回此 Socket 对象的输出流 shutdownOutput() ------ 定义结束标志,告诉服务器端我不再发送数据了,你不要等了
使用 TCP 客户端发送数据
java
public class TCPClientDemo {
public static void main(String[] args) throws IOException {
Socket s = new Socket("DESKTOP-R1L7T0I", 10088); //创建客户端Socket对象
OutputStream ops = s.getOutputStream(); //获取输出流
ops.write("我是TCP".getBytes()); //写数据
s.close(); //释放资源
}
}
Exception in thread "main" java.net.ConnectException: Connection refused: connectServerSocket
public class ServereSocket extends Object
implements Closeable[!summary] ServerSocket(int port) ------ 构造方法 1
accept() ------ 返回一个与该服务端端口匹配的客户端的 Socket 对象
使用 TCP 服务器端接收数据
java
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket svs = new ServerSocket(10088); //创建服务器端Socket对象
Socket s = svs.accept(); //倾听客户端并生成Socket对象
InputStream ips = s.getInputStream(); //获取输入流
byte[] b = new byte[1024];
int len = ips.read(b); //读数据
String data = new String(b, 0, len);
System.out.println(data);
svs.close(); //释放掉svs的资源,那么s的资源也会自动释放
}
}
等待接收使用 TCP 协议传输数据
java
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket svs = new ServerSocket(10088); //创建服务器端Socket对象
Socket s = svs.accept();
InputStream ips = s.getInputStream(); //用输入流接收客户端发送的数据
byte[] b = new byte[1024];
int length = ips.read(b);
String data = new String(b, 0, length);
System.out.println("我收到了你的数据");
System.out.println("你的数据是:" + data); //打印客户端发送的数据
OutputStream ops = s.getOutputStream();
ops.write("数据收到了".getBytes()); //接收到数据之后,给客户端进行反馈
svs.close(); //释放资源
}
}
我收到了你的数据
你的数据是:服务器端,我来了java
public class TCPClientDemo {
public static void main(String[] args) throws IOException {
Socket s=new Socket("DESKTOP-R1L7T0I",10088); //创建客户端Socket对象
OutputStream ops = s.getOutputStream(); //获取输出流
ops.write("服务器端,我来了".getBytes()); //写数据
InputStream ips = s.getInputStream(); //获取输入流来接收对应对应端口的服务器反馈
byte[] b=new byte[1024];
int length=ips.read(b);
String data=new String(b,0,length); //data就是服务器端反馈的数据
System.out.println(data);
s.close(); //释放资源
}
}
数据收到了