2011-11-29 85 views
1

M在socket編程新... I HV創建一個從隊列中的客戶端存儲名稱& ID服務器,然後將其保存在另一個隊列客戶端提供的所有輸入。當客戶端寫入'測試'時,服務器檢索所有存儲的數據作爲客戶端類型的一些值,即整數...當客戶端類型'恢復'服務器再次開始存儲客戶端的給定輸入隊列...如果客戶端類型'退出'服務器發回客戶端的名稱和id並開始等待ne客戶端。接收這些信息並關閉套接字。服務器的客戶端套接字編程輸出困難

問題: m在從隊列中檢索數據時遇到問題。當我輸入退出時,我可以看到通過for循環回顧的名稱和ID。如果我把這一行outToClient.writeBytes(「Thank You!」+'\ n');在for循環之後,它會顯示客戶端的名稱& id,但客戶端工作正常。

中的if else條件

同時檢查「測試」再次聲明,我在檢索數據面臨的問題。服務器要求整數..客戶類型一個整數,然後我不從服務器獲取數據。

這裏是我的代碼

服務器端:

import java.io.*; 
import java.net.*; 
import java.util.*; 

class server 
{ 
    public static void main(String argv[]) throws Exception 
{ 
String clientSentence; 
String replySentence; 
ServerSocket welcomeSocket= new ServerSocket(6789); 

while(true) 
{ 
System.out.println("#########Server Waiting#########"); 
Socket connectionSocket = welcomeSocket.accept(); 

BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));   
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 

Queue<String> qe = new LinkedList<String>(); 

outToClient.writeBytes("Enter your Name and ID Please..."+'\n'); 
for(int i=0;i<=1;i++) 
{ 
clientSentence = inFromClient.readLine(); 
qe.add(clientSentence); 
} 

outToClient.writeBytes("Thank you! You may now proceed further..."+'\n'); 

Queue<String> chatq = new LinkedList<String>(); 
clientSentence = inFromClient.readLine(); 

while(!clientSentence.equals("exit")) 
{ 

    if(clientSentence.equals("test")) 
    { 
    outToClient.writeBytes("Enter Integers to fetch data or 'resume' to continue..."+'\n'); 
    clientSentence = inFromClient.readLine(); 

    while(!clientSentence.equals("resume")) 
    { 
     replySentence = chatq.remove(); 
     outToClient.writeBytes(replySentence+'\n'); 
     clientSentence = inFromClient.readLine(); 
    } 

    if(clientSentence.equals("resume")) 
    { 
     outToClient.writeBytes("You may now proceed again..."+'\n'); 
     clientSentence = inFromClient.readLine(); 

    } 
    } 

    else 
    { 
    chatq.add(clientSentence); 
    clientSentence = inFromClient.readLine(); 
    }   

} 

if(clientSentence.equals("exit")) 
{ 
    outToClient.writeBytes("Client Name & ID: "+'\n'); 

for(int i=0;i<=1;i++) 
    { 
    replySentence = qe.remove(); 
    outToClient.writeBytes(replySentence+'\n'); 
    } 


} 
} 
} 
} 

客戶端:

import java.io.*; 
import java.net.*; 
import java.util.*; 

class client 
{ 
    public static void main(String argv[]) throws Exception 
    { 
    String sentence; 
    String modifiedSentence; 

    BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 

    InetAddress inetAddress=InetAddress.getLocalHost(); 
    System.out.println(inetAddress); 

    Socket clientSocket = new Socket(inetAddress,6789); 
    while(true) 
    { 

     DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());  

     BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

     modifiedSentence=inFromServer.readLine(); 
     System.out.println("From Server: "+modifiedSentence+'\n'); 

     for(int i=0;i<=1;i++) 
     { 
     sentence = inFromUser.readLine(); 
     outToServer.writeBytes(sentence+'\n'); 
     } 
     modifiedSentence=inFromServer.readLine(); 
     System.out.println("From Server: "+modifiedSentence + '\n'); 



     sentence = inFromUser.readLine(); 
     while(!sentence.equals("exit")) 
     { 

if(sentence.equals("test")) 
{ 
    outToServer.writeBytes(sentence+'\n'); 
    modifiedSentence=inFromServer.readLine(); 
    System.out.println("From Server: "+modifiedSentence + '\n'); 
    sentence = inFromUser.readLine(); 

    while(!sentence.equals("resume")) 
    { 
    outToServer.writeBytes(sentence+'\n'); 
    modifiedSentence=inFromServer.readLine(); 
    System.out.println("From Server: "+modifiedSentence + '\n'); 
    sentence = inFromUser.readLine(); 
    } 

    if(sentence.equals("resume")) 
    { 
    outToServer.writeBytes(sentence+'\n'); 
    modifiedSentence=inFromServer.readLine(); 
    System.out.println("From Server: "+modifiedSentence + '\n'); 
    sentence = inFromUser.readLine(); 

    } 

} 

else 
{ 
    outToServer.writeBytes(sentence+'\n'); 
    sentence = inFromUser.readLine(); 
} 
} 

    if(sentence.equals("exit")) 
    { 
    outToServer.writeBytes(sentence+'\n'); 
    modifiedSentence=inFromServer.readLine(); 
    System.out.println("From Server: "+modifiedSentence + '\n'); 
    for(int i=0;i<=1;i++) 
    { 
    modifiedSentence=inFromServer.readLine(); 
    System.out.println(modifiedSentence + '\n'); 
    } 

    clientSocket.close(); 
    break; 
} 

} 

} 
} 

回答

0

我想這是[homework]但是...

你混合二進制(DataOutputStream類)文本(BufferedReader類)。你應該使用一個或另一個,否則你一定會迷惑自己。

看來你要發送的文字,所以我會用的BufferedReader和PrintWriter的。 DataOutputStream更適合二進制協議。

+0

yea ...這是家庭作業nm試圖做到這一點... m不擅長java所以有困難.... m會去嘗試PrintWriter n讓你知道..thnx – ZoeHime

+0

我只替換了dataoutputstream與PrintWriter一樣:PrintWriter outToClient = null; outToClient = new PrintWriter(connectionSocket.getOutputStream(),true);和數據打印的地方,如:outToClient.println(「謝謝你!你現在可以繼續......」+'\ n'); 現在有點慌亂,因爲輸出不是因爲它是...可以üPLZ有點或可能引用任何有用的鏈接?米檢查一些,但仍然我會很感激,如果你的幫助 – ZoeHime

+0

你能用英語而不是文字說話嗎?你可以用你現在擁有的東西來更新你的代碼嗎? –