我使用了在这里找到的 UDP 服务器/客户端示例:http://systembash.com/content/a-simple-java-udp-server-and-udp-client/
客户端向服务器发送一个字符串,服务器将小写字母改为大写。
服务器:
import java.io.*;
import java.net.*;
class UDPServer
{
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String( receivePacket.getData());
System.out.println("RECEIVED: " + sentence);
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
}
}
客户端:
import java.io.*;
import java.net.*;
class UDPClient
{
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in, "UTF-16"));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
我在客户端编写测试时的输出:
test
FROM SERVER:TEST□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□.....
最佳答案
因为您声明了数据包大小:
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
以下代码将返回长度为 1024 的字符串:
String sentence = new String( receivePacket.getData() );
您需要使用 receivePacket.getLength() 来获取有效负载大小,因此将其更改为:
String sentence = new String( receivePacket.getData(), 0, receivePacket.getLength() );
应该可以了!
关于Java UDP 服务器-客户端显示方形字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23759751/