2015-08-20 8 views
5

मैं जावा में चैटप्रोग्राम बनाने की कोशिश कर रहा हूं, जब मैं क्लाइंट पक्ष पर संदेश भेजता हूं तो सर्वर पक्ष को संदेश मिलता है। लेकिन जब मैं सर्वर से सर्वर पर भेजता हूं तो उसे संदेश नहीं मिलता है।सर्वर से क्लाइंट को संदेश भेजने के लिए

मैं नहीं देख सकता कि मैं क्या गलत कर रहा हूं।

सर्वर साइड कोड:

private void serverStart(){ 
    textArea.append("Starting server " + " \n"); 

    try { 
     serverSocket = new ServerSocket(4444); 
     textArea.append("Waiting for Clients " + " \n"); 

     //Reading message from the client 
     socket = serverSocket.accept(); 

     textArea.append("Client Connected " + "\n"); 

     //Send message to client 
     out = new PrintWriter(socket.getOutputStream()); 
     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     while (true) 
     {   

      messageFromClient = in.readLine(); 
      whileChat(messageFromClient); 
     } 
    } catch(IOException ioExecption) { 
     ioExecption.printStackTrace(); 
    } 
} 

private void whileChat(String messageFromClient) { 
    showMessage(messageFromClient); 
    System.out.println("Message from client : " + messageFromClient); 
} 

protected static void showMessage(final String message) { 
    SwingUtilities.invokeLater( 
    new Runnable(){ 
     public void run() 
     { 
      Gui.consoleTextArea.append(message + "\n"); 
     } 
    }); 
} 

public static void sendMessage(String message) { 
    out.println(message); 
    showMessage(name + " : " + message + "\n"); 
} 

क्लाइंट साइड:

private void connectToServer() { 

    try { 
     socket = new Socket("localhost", 4444); 
    } catch (UnknownHostException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    Thread clientThread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       // attach to socket's output stream with auto flush turned on 
       //Send message to the server 
       out = new PrintWriter(socket.getOutputStream(), 
         true); 

       //Get return message from server 
       in = new BufferedReader(new InputStreamReader(
         socket.getInputStream())); 
       messageFromServer = in.readLine(); 
       whileChatting(messageFromServer); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    clientThread.start(); 
} 

private void whileChatting(String messageFromServer) { 
    showMessage(messageFromServer); 
    System.out.println("Message from server to client " + messageFromServer); 
} 

public static void Send(String msg) { 
    out.println(name + " : " + msg); 
    showMessage(name + " : " + msg + "\n"); 
} 
protected static void showMessage(final String message) { 
    SwingUtilities.invokeLater( 
    new Runnable(){ 
     public void run(){ 
      Gui.consoleTextArea.append(message); 
     } 
    }); 
} 

आशा किसी को इस समस्या के साथ मेरी मदद कर सकता है।

+0

क्या आपको 'क्लाइंट कनेक्टेड' संदेश दिखाई देता है? – slartidan

+0

लिखने के तुरंत बाद 'out.flush()' पर कॉल करने में मदद मिल सकती है। –

+0

हां, मैं क्लाइंट से जुड़े संदेश को देखता हूं, बाहर। फ्लश कॉल की आवश्यकता होती है जब आप PrintWriter में सत्य रखते हैं? – tinaw25

उत्तर

3

आप PrintWriter पर एक फ्लश तुरंत प्रत्येक println के बाद भी बेहतर प्रदर्शन कर सकते हैं, या: उदाहरण PrintWriter autoFlush = सच के साथ:

out = new PrintWriter(socket.getOutputStream(), true); 

इस तरह, हर बार जब आप println फोन, printf, या format , प्रिंटवाइटर अंत में बफर की फ्लश करेगा।

+0

सहायता के लिए बहुत बहुत धन्यवाद। मैंने नहीं देखा था कि मैं PrintWriter ऑब्जेक्ट में एक वास्तविक मान भूल गया था :-) – tinaw25

+0

आपका स्वागत है! –

1
in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

इस लाइन हमेशा ग्राहक output इंतज़ार कर रहा है, और आपके ग्राहक भी server को संदेश भेजने के लिए नहीं है।

ध्यान दें: आपके server और client दोनों उपयोगकर्ता इनपुट नहीं पढ़ते हैं।

संबंधित मुद्दे