2012-06-20 5 views
0

Мне нужно создать сервер и клиент на Java. Сервер открывает соединение на порту 18163. Клиент подключается к серверу и устанавливает номер X, сервер отправляет сообщение «угадать», сервер, получивший сообщение, неоднократно пытается определить значение X для клиента, отправляющего сообщение « Я чувствую Y ", где Y - значение целого числа. Когда клиент получает сообщение «Я чувствую, что Y» отправляет серверу: «То же», если номер правильный, «Не равно, если число неверно». Если номер правильный, сервер отправляет клиенту «Закрыть», и клиент закрывает соединение.Socket java client-server

Я должен реализовать эту программу без использования нитки! Я попробовал это, но это не сработает.

КЛИЕНТ:

public class Client{ 

    public static void main(String[] args)throws Exception{ 

    Socket c= new Socket("127.0.0.1",18163); 

    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(c.getInputStream())); 
    DataOutputStream outToServer=new DataOutputStream(c.getOutputStream()); 

    int min=1,max=10; 
    String frase; 
    int n1; 


    int numcasuale=(min+(int)(Math.random()*((max - min)+1))); 

    System.out.println("Num casuale generato: "+numcasuale); 




       do{ 
      frase=inFromServer.readLine(); 
        n1=Integer.parseInt(frase); 

        System.out.println("DAL SERVER: PROVO "+n1); 

       }while(!(n1==numcasuale)); 
        outToServer.writeBytes("UGUALE\n"); 
     frase=inFromServer.readLine(); 
     if(frase.equals("CLOSE")){ 
       System.out.println("Esecuzione terminata."); 
         c.close(); 
         } 
    } 
} 

SERVER:

public class Server{ 

    public static void main(String[] args)throws Exception{ 
     ServerSocket ss = new ServerSocket(18163); 

     int min=1,max=10,numcasuale; 
     String dallclient; 


     while(true){ 
      Socket c= ss.accept(); 
      System.out.println("Client connesso: "+ c.getRemoteSocketAddress()); 

      DataOutputStream alclient=new DataOutputStream(c.getOutputStream()); 

BufferedReader dalclient =new BufferedReader(new InputStreamReader(c.getInputStream())); 

      dallclient= dalclient.readLine(); 



       System.out.println("DAL CLIENT :"+dallclient); 

       do{ 
        numcasuale=(min+(int)(Math.random()*((max - min)+1))); 
        alclient.write(numcasuale); 
           dallclient= dalclient.readLine(); 
        System.out.println("DAL CLIENT: "+dallclient); 
        }while(!(dallclient.equals("UGUALE"))); 

       }alclient.writeBytes("CLOSE\n"); 





    } 


} 
+2

Это домашнее задание? –

+3

В чем проблема? –

+0

похоже, что ваш клиент не делает то, что вы говорите, это должно быть в описании: «Когда клиент получает сообщение« Я чувствую, что Y »отправляет серверу:« То же », если номер правильный,« Не равно, если число не соответствует правилу .... "-> но ваш клиент входит в цикл, пока цикл читает в предположении с сервера только как int и никогда не отвечает, пока это не будет правильным. – user12345613

ответ

0

Я думаю, что в серверной части вы пропускаете \n на этой линии:

while(!(dallclient.equals("UGUALE"))); 

, так как клиент посылает "UGUALE\n"

outToServer.writeBytes("UGUALE\n"); 
+0

Вы можете отформатировать код, разместив обратные элементы (') вокруг него или путем размещения его на новой строке с отступом с 4 пробелами. – RustyTheBoyRobot