1
私は単純なUDPServer
とUDPClient
を構築しようとしています。文字列比較は機能しません。ここ
は、私がこれまでに得たものです:なぜこのString.equals()は機能しませんか?
import java.io.*;
import java.net.*;
import java.util.concurrent.TimeUnit;
public class UDPSender
{
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9877);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
boolean weiter = true;
do {
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();
/*I'm trying to make the if()-statement true, but the program always enters the else()-clause, no matter what I do.*/
if("Shutdown".equals(sentence)) {
weiter = false;
String bye = ("Auf Wiedersehen! Verbindung wird gekappt...");
sendData = bye.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
serverSocket.close();
} else {
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
} while(weiter);
}
}
そして、これがクライアントである:
import java.io.*;
import java.net.*;
import java.util.ArrayList;
class UDPClient{
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
//Look, I'm explicitly sending Shutdown, too!
String sentence = "Shutdown";
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9877);
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();
}
}
両方が、今のところ、同じコンピュータ上で動作するかどう私は幸せになるが、この文字列の問題がある後固定された、私はより多くのPCを関与させる必要があります。 stackoverflowと他の同様の質問で提案されたすべてのソリューションについて、最初の3ページに記載されている何かを試してみましたが、何も私のために働いていませんでした。私はできない何かを見ることができますか?
public String(byte[] bytes, int offset, int length)
は、あなたがトンを確認しましたhat 'sentence'はヌル文字、スペース(または他の非印刷物)で埋められませんか? –デバッガを使ってコードを実行し、ブレークポイントを比較に加え、変数に正確に何が入っているかを確認します。 –
Mark Rotteveel、あなたの疑惑が正しいことが判明しました。ヌル文字がありました。 ^^; Reimeusのソリューションはそれを私のために修正しました。ありがとう^^ – Aye