通过Tcp发送数据后,字符串比较不起作用

时间:2013-12-06 11:40:05

标签: java sockets tcp bufferedreader string-comparison

我有以下代码。一个读取名为“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();
    }

1 个答案:

答案 0 :(得分:1)

text1 = text1 + line;您不在此处使用空格或分隔符。这可能是问题吗? )(我的意思是你打印几个单词,比如CatHouseDogFood,它不是字典中的单词)。当你只打印一个单词(即“make”)

时,它的工作原理是有意义的

如果在服务器端打印compareTo结果,会得到什么?