一、前言
Java的网络编程(java.net包)提供和计算机网络操作相关的API,本文演示Java代码模拟tcp通信和udp通信,且见代码1、代码2。
模拟TCP:使用serversocket和socket;
模拟UDP:使用DatagramSocket。
二、代码
2.1 代码1——模拟TCP通信
package mypackageTCP;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
//网络编程相关的所有的API都在:java.net包.
//TCP 传输控制协议
public class Server {
public static void main(String[] args) throws Exception {
String data = "This is data";
// 创建服务端并指定端口
ServerSocket serverSocket = new ServerSocket(8082);// 模拟tomcat应用服务器
System.out.println("服务端已经打开,随时可以连接......");
boolean accept = true;
while (accept) { // 等待接收
Socket client = serverSocket.accept();
System.out.println("打印当前连接的客户端对象: " + client.getInetAddress());
PrintStream printStream = new PrintStream(client.getOutputStream()); // 打印流和连接的客户端建立关系
printStream.print(data); // 在打印流中写入数据 发送给客户端
printStream.close(); // 关闭打印流
}
serverSocket.close();
}
}
package mypackageTCP;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception {
Socket client = new Socket("localhost", 8082);
Scanner scanner = new Scanner(client.getInputStream());
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println("这里是客户端: " + line);
}
scanner.close();
client.close();
}
}
输出1:
先运行Server类:
服务端已经打开,随时可以连接......
然后运行Client类:
这里是客户端: This is data
小结1:和真实的网络连接一样,先运行Server类,启动服务端,等待客户端来连接(注意:服务端只能启动一次,否则报错端口被占用),然后启动客户端来连接上服务端,服务端可以获取连接过来的客户端对象并打印出来,客户端可以打印服务端发送过来的数据。
java代码模拟UDP通信,且见代码2。
2.2 代码2——模拟UDP通信
package mypackageUDP;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
//UDP 用户数据报协议
public class Receiver {
public static void main(String[] args) throws Exception {
//创建接收端对象
DatagramSocket reciver = new DatagramSocket(10010);// 尽量使用10000+以上的端口号,避免冲突
byte[] buffer = new byte[1024]; // 缓冲字节数组
// 接收数据
DatagramPacket datagramPacket = new DatagramPacket(buffer, 1024);
reciver.receive(datagramPacket);
// 获取接收的数据
String mString = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
System.out.println("Sender发送者发送过来的数据: " + mString);
}
}
package mypackageUDP;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Sender { // 发送方
public static void main(String[] args) throws Exception {
//要发送的数据
String data = "Java is the best language!";
//创建发送端对象
DatagramSocket sender = new DatagramSocket(10011);
DatagramPacket datagramPacket = new DatagramPacket(data.getBytes(), data.getBytes().length,
InetAddress.getLocalHost(), 10010);
sender.send(datagramPacket);
sender.close();
}
}
输出2:先运行Receiver,然后运行Sender:
Sender发送者发送过来的数据: Java is the best language!
小结2:和真实的网络连接一样,先运行Receiver类,启动接收端,等待发送端来发送,然后启动发送端发送数据到接收端,接收端将获取到的数据打印出来。
三、尾声
Java网络编程的API来源于java.net包,这是javase的一个基本操作包,里面提供有关网络操作的相关类、接口,可以帮助开发者完成网络相关操作。
天天打码,天天进步!