InetAddress:不能new, 可以通过getByName方法获得实例
InetAddress localhost = InetAddress.getByName("localhost");
InetAddress localhost = InetAddress.getByName("127.0.0.1");
Socket:客户端类 (InetAddress,端口号)
Socket Socketsocket = new Socket(serverIP, 8080);
// 发送消息给服务器
os = socket.getOutputStream();
os.write("您好,服务器".getBytes(StandardCharsets.UTF_8));
socket.shutdownOutput();
// 接受消息
InputStream inputStream = socket.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] msgBuffer = new byte[1024];
int len2;
while ((len2 = inputStream.read(msgBuffer)) != -1) {
baos.write(msgBuffer, 0, len2);
}
System.out.println(baos.toString());
socket.shutdownInput();
ServerSocket:服务器端类
ServerSocket serverSocket = new ServerSocket(8080);
// 监听客户端信息
accept = serverSocket.accept();
// 读取客户端端消息
is = accept.getInputStream();
baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
System.out.println(baos.toString());
DatagramSocket(发送的主体)
// 随机端口
this.mySocket = new DatagramSocket();
// 指定端口
this.mySocket = new DatagramSocket(8080);
DatagramPacket(发送的内容)
// 建立一个包
String msg = "test!";
InetAddress inetAddress = InetAddress.getByName("localhost") ;
int port = 9000;
DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(StandardCharsets.UTF_8), 0, msg.getBytes(StandardCharsets.UTF_8).length, inetAddress, port);
发送信息
// 发送包
datagramSocket.send(datagramPacket);
接受信息
// 建立一个接收的socket
DatagramSocket datagramSocket = new DatagramSocket(9000); // 端口号要和发送内容里指定的一致
// 接受消息
byte[] bytes = new byte[1024];
DatagramPacket dataPacket = new DatagramPacket(bytes, 0, bytes.length);
datagramSocket.receive(dataPacket);
String msg = new String (dataPacket.getData(), 0, dataPacket.getData().length, StandardCharsets.UTF_8);
System.out.println(msg);
原文:https://www.cnblogs.com/hanchuge/p/14864904.html