第十五篇:网络编程,模拟TCP和模拟UDP

一、前言

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的一个基本操作包,里面提供有关网络操作的相关类、接口,可以帮助开发者完成网络相关操作。

天天打码,天天进步!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祖母绿宝石

打赏一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值