使用 DatagramPacket 和 DatagramSocket 类创建服务器-客户端应用程序
要创建一个使用 UDP 在客户端和服务器之间建立连接的应用程序,我们需要执行以下步骤:
- 创建服务器程序
- 创建客户端程序
- 执行客户端和服务器程序
让我们执行以下小节中的步骤:
创建服务器程序
让我们创建名为 UDPServerEx 的服务器类,它从用户那里获取消息并将消息(数据报)发送到客户端。清单 1 显示了UDPServerEx 的代码。 Java文件:
文件名:UDPServerEx。Java
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();
}
}
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();
}
}
编译 UDPServerEx。 Java文件:
D:\UDPExample>javac UDPServerEx.java
注意:路径可能会根据您保存文件的位置而有所不同。
创建客户端程序
让我们创建一个名为 UDPClient 的客户端类,它接受从服务器发送的消息,即 UDPServerEx 类。客户端然后显示在命令提示符中收到的消息。清单 2 显示了UDPClient 的代码。 Java文件:
文件名:UDP 客户端。Java
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和UDP客户端。 Java在两个单独的命令提示符窗口中。请记住,UDPServerEx 类在 UDPClient 类之前执行。图 1 显示了 UDP Server Java和 UDPClient 的输出。 Java文件: