Java 使用DatagramPacket和DatagramSocket类创建一个服务器-客户端应用程序
要创建一个使用UDP来建立客户端和服务器之间的连接的应用程序,我们需要执行以下步骤。
- 创建一个服务器程序
- 创建一个客户端程序
- 执行客户端和服务器程序
让我们在下面的小节中执行这些步骤。
创建服务器程序
让我们创建服务器类,命名为UDPServerEx,它接收来自用户的消息并将消息(数据报)发送到客户端。清单1显示了 UDPServerEx.java 文件的代码。
文件名:UDPServerEx.java
// A server that sends messages to the client
import java.net.*;
class UDPServerEx {
public static DatagramSocket mySocket;
public static byte myBuffer[] = new byte[2000];
public static void serverMethod() throws Exception
{
int position = 0;
while (true) {
int charData = System.in.read();
switch (charData) {
case -1:
System.out.println(
"The execution of "
+ "the server has been terminated");
return;
case '\r':
break;
case '\n':
mySocket.send(
new DatagramPacket(
myBuffer,
position,
InetAddress.getLocalHost(),
777));
position = 0;
break;
default:
myBuffer[position++]
= (byte)charData;
}
}
}
public static void main(String args[]) throws Exception
{
System.out.println("Please enter some text here");
mySocket = new DatagramSocket(888);
serverMethod();
}
}
要编译UDPServerEx.java文件 。
D:\UDPExample>javac UDPServerEx.java
注意:路径可能根据你保存文件的地方而有所不同
创建客户端程序
让我们创建一个客户端类,命名为UDPClient,它接受从服务器发送的消息,UDPServerEx类。然后客户端在命令提示符中显示收到的消息。清单2显示了 UDPClient.java 文件的代码。
文件名:UDPClient.java
// UDPClient that receives and
// displays messages sent from the server
import java.net.*;
class UDPClient {
public static DatagramSocket mySocket;
public static byte myBuffer[] = new byte[2000];
public static void clientMethod() throws Exception
{
while (true) {
DatagramPacket dataPacket
= new DatagramPacket(myBuffer,
myBuffer.length);
mySocket.receive(dataPacket);
System.out.println("Message Received :");
System.out.println(
new String(
dataPacket.getData(),
0,
dataPacket.getLength()));
}
}
public static void main(String args[]) throws Exception
{
System.out.println(
"You need to press CTRL+C"
+ " in order to quit.");
mySocket = new DatagramSocket(777);
clientMethod();
}
}
使用以下命令来编译UDPClient.java文件 。
D:\UDPExample>javac UDPClient.java
输出
注意: 为了执行UDPServerEx和UDPClient类,请在两个不同的命令提示符窗口中运行UDPServerEx.java和UDPClient.java。记住,UDPServerEx类要在UDPClient类之前执行。图1显示了UDP Server java和UDPClient.java文件的输出:
显示UDPServerEx和UDPClient类的输出结果