2012-06-20 267 views
0

我必須在Java中構建服務器和客戶端。服務器在端口18163上打開一個連接。客戶端連接到服務器並建立一個數字X,服務器發送消息「guess」,服務器接收到消息反覆嘗試確定X的值給發送消息的客戶端「我感覺Y「其中Y是一個整數的值。當客戶端收到消息「我感覺Y」發送給服務器時:如果號碼正確,則爲「相同」,「如果號碼不正確,則不等於」。如果號碼正確,則服務器向客戶端發送「關閉」並且客戶端關閉連接。套接字java客戶端服務器

我必須在不使用線程的情況下實現這個程序!我嘗試過,但它不起作用。

客戶:

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「發送到服務器:」相同「,如果數字是正確的,」不相等if數字是不正確的....「 - >但你的客戶端輸入一個do while循環讀取來自服務器的猜測,僅僅是一個int,並且直到它是一個正確的猜測纔會響應 – user12345613

回答

0

我想在服務器部分你缺少一個\n在這一行:

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

,因爲客戶端發送"UGUALE\n"

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

你可以通過將反斜槓'),或者將它放在一個縮進4個空格的新行中。 – RustyTheBoyRobot

相關問題