我有以下代码。一个读取名为“denglish.txt”的文件将其拆分为单词,并通过Tcp套接字连接将每个第二个字发送到服务器。服务器现在应该读取这个单词并将a与字典中的单词进行比较。 奇怪的是,如果我以这种方式发送,比较总是会失败。但是,如果客户发送类似out.Print(“make”)的东西,它就有效。 我真的不明白为什么会这样。我可以从服务器上的客户端发送和打印出来的单词,然后打印出正确的单词,但是stringcompare失败了。 可能有人可以帮助我。谢谢你们
Socket socket = new Socket ("localhost" , 47777);
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
//Socket socket1 = new Socket ("localhost" , 47778);
//PrintWriter out1 = new PrintWriter(socket1.getOutputStream(),true);
String line;
BufferedReader text = new BufferedReader(new InputStreamReader(new FileInputStream("denglisch.txt")));
String text1 = "";
while((line = text.readLine()) != null) { // handle lines
text1 = text1 + line;
}
int i = 0;
//out.println("make");
StringTokenizer tokenizer = new StringTokenizer( text1,",.\" : !" );
while ( tokenizer.hasMoreTokens() )
{
if (i % 2 == 0)
{
out.println(tokenizer.nextToken().toLowerCase().toString());
out.flush();
}
if (i % 2 ==1 )
{
//out1.println(tokenizer.nextToken());
}
i = i+1;
Server CODE
//Server Codepublic
<pre> filteritserver(BufferedReader dict, String plusminus){
this.dict = dict;
this.port = 47777;
this.plusminus = plusminus;
}
public void run() {
ServerSocket server;
boolean isopen = false;
while (isopen == false){
try {
System.out.println(port);
server = new ServerSocket(port);
Socket cSocket = server.accept();
msg = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
isopen = true;
} catch (IOException e1) {
// TODO Auto-generated catch block
System.out.println("Port is already in used trying next one");
port = port +1;
}
}
System.err.println(port);
int i = 0;
String s = "word";
try {
while ((word = msg.readLine())!= null)
// while ( i < 3)
{
//System.out.println("prozess started und das Vorzeichen ist "+plusminus);
// System.out.println("das Wort "+ word +" ist hier angekommen");
try {
while(true) { // blunt sequential dictionary search
String line = dict.readLine();
//System.out.println(line);
if(line == null){
break;
}
else if(word.compareTo(line) < 0)
{
if (plusminus.equals("-"))
{
System.out.println("Dieses Wort kommt im Dictionary nicht vor " + word);
}
}
else if(word.compareTo(line)== 0 ){
if (plusminus.equals("+")){
System.out.println("Dieses Wort kommt im Dictionary 1234 vor " + word);
}
break;
}
else /* word.compareTo(line) > 0 */ continue; }
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:1)
text1 = text1 + line;您不在此处使用空格或分隔符。这可能是问题吗? )(我的意思是你打印几个单词,比如CatHouseDogFood,它不是字典中的单词)。当你只打印一个单词(即“make”)
时,它的工作原理是有意义的如果在服务器端打印compareTo结果,会得到什么?