我的目標是收集客戶端的數據,這些客戶端將數據發送到UDP服務器,將字符串中的數據連接起來(僅用於測試),並將整個連接字符串發送回客戶端。 UDPClient和UDPServer之間的通信非常完美。我可以發送數據並接收它。但是我想知道爲什麼我不能在一個StringBuffer中連接數據,因爲當我嘗試時,客戶端總是獲得我發送的第一個字符串。不管我發送給服務器的是什麼字符串都不會改變。 這裏是服務器類的代碼:StringBuffer不會追加數據 - 由於線程?
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPServer extends Thread {
DatagramSocket serverSocket;
DatagramPacket receivePacket;
String sentence;
InetAddress IPAddress;
StringBuffer data = new StringBuffer();
public UDPServer() throws SocketException {
serverSocket = new DatagramSocket(9876);
}
public void run() {
while (true) {
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
receivePacket = new DatagramPacket(receiveData, receiveData.length);
try {
serverSocket.receive(receivePacket);
} catch (IOException e) {
System.out.println("receive....");
e.printStackTrace();
}
sentence = new String(receivePacket.getData());
IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
data.append(sentence);
sendData = data.toString().trim().getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData,
sendData.length, IPAddress, port);
try {
serverSocket.send(sendPacket);
} catch (IOException e) {
System.out.println("send...");
e.printStackTrace();
}
}
}
}
我已經調試它:變量「句子」始終得到正確的數據,但行data.append(句);沒有做任何事情。它只是不附加數據。這是爲什麼?
你在字符串緩衝區看着前/後追加,與調試器? – hvgotcodes 2010-07-31 18:35:58
還有一個bug。在追加新數據之前,你的stringbuffer變量需要被清除。可能是data.setLength(0),然後開始附加新數據。但是這不會解決你原來的問題 – chedine 2010-07-31 18:46:40
我不認爲它與你的問題有關,但總是用新的String(...)和String.getBytes(...)指定一個字符集。我建議您始終使用「UTF-8」。另外,你的行sendData = new byte [1024];沒用。 sendData將是data.toString()方法返回的任何值,可能大於1024字節。據推測,這是你的代碼中的一個錯誤。 – 2010-07-31 18:49:03