Клиент не может отправлять сообщения на сервер в программе чата Java - PullRequest
0 голосов
/ 21 августа 2011

Я реализовал простую программу чата на Java.Однако когда я запускаю код и пытаюсь отправить сообщения от клиента, я получаю это как вывод на стороне сервера

Например:

Клиент: привет

Сервер: ServerSocket [addr= 0.0.0.0 / 0.0.0.0, port = 0, localport = 2000]

Я получаю такой ответ от клиента на любое отправляемое мной сообщение. Я в основном работаю над localhost

Может кто-нибудь помочь решить мою проблему?

Мой код Java:

         class Client
             {
             public static void main(String args[]) throws IOException
               {

           BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
           System.out.println("enter the key value");
           int key=Integer.parseInt(br.readLine());
           int random=(int)(Math.random()*50);
           System.out.println(random);
           int response=((int)random)%(key);
           System.out.println(key);
           System.out.println("response generated is "+response);
           System.out.println("Authentication begins");
           Socket echoSocket = new Socket("127.0.0.1", 2500);
           BufferedReader sin=new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
           PrintStream sout=new PrintStream(echoSocket.getOutputStream());
           BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
           PrintWriter out = null;
           String s;
           DataOutputStream clientout=new DataOutputStream(echoSocket.getOutputStream());
           clientout.writeInt(random);
           clientout.writeInt(key);
          clientout.writeInt(response);
          System.out.println("client is"+response);
          System.out.println("chat is started");

        while (true)
    {
        System.out.print("Client : ");
        s=stdin.readLine();
        sout.println(s);
        s=sin.readLine();
        System.out.print("Server : "+s+"\n");
        if ( s.equalsIgnoreCase("BYE") )
           break;
    }

            echoSocket.close();
            sin.close();
            sout.close();
            stdin.close();
         }
    }

          class Server
         {
            public static void main(String args[]) throws IOException
              {
              int random3=(int)(Math.random()*50);
              int response2;
              int response3;
              int random2;
              int key2;
              ServerSocket s= new ServerSocket(2500);
              Socket echoSocket=s.accept();
              DataInputStream clientin=new     DataInputStream(echoSocket.getInputStream());
              BufferedReader cin=new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
         PrintStream cout=new PrintStream(echoSocket.getOutputStream());
        BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
      String s1;
            random2=clientin.readInt();
            key2=clientin.readInt();
            response2=clientin.readInt();
            System.out.println(key2);
         response3=(random2)%(key2);
            System.out.println("server is"+response2);
            if(response2==response3)
           {
            System.out.println("client is authenticated..chat starts");
                 while (true)
       {
        s1=cin.readLine();
        if (s1.equalsIgnoreCase("END"))
        {
            cout.println("BYE");
                break;
         }
        System. out.print("Client : "+s+"\n");
        System.out.print("Server : ");
        s1=stdin.readLine();
        cout.println(s1);
       }
          }

             s.close();
               echoSocket.close();
               cin.close();
            cout.close();
            stdin.close();
         }
       }

Ответы [ 2 ]

1 голос
/ 21 августа 2011

Вы получите вывод, потому что используете неправильные переменные. Переменная, которую вы должны напечатать с сервера, это s1, а не s.

Переменная s относится к сокету, поэтому вы получаете информацию о сокете вместо ответа клиента


s1=cin.readLine();
if (s1.equalsIgnoreCase("END"))
{
    cout.println("BYE");
    break;
}

System. out.print("Client : "+s1+"\n"); // note that this should be s1 and not s

В качестве хорошей практики вы должны четко называть свою переменную, чтобы вы и другие всегда могли прочитать код. Наличие s, s1 и так далее только запутает вас, когда код станет больше. Это также хорошая привычка иметь и делать других инженеров, которые работают с вами, счастливее:)

1 голос
/ 21 августа 2011

Не показывая никакого кода, это почти невозможно сказать.Пожалуйста, напишите немного.

Однако адрес 0.0.0.0 выглядит подозрительно.Если вы работаете с localhost, попробуйте 127.0.0.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...