2013-03-18 7 views
5

मुझे सर्वर और क्लाइंट प्रोग्राम के बीच संदेश भेजने के लिए प्रिंटवाइटर या किसी अन्य आउटपुट स्ट्रीम का उपयोग करने में समस्या है। अगर मैं प्रिंट करने के लिए println ("abc") का उपयोग करता हूं तो यह ठीक से काम करता है, लेकिन अगर मैं प्रिंट ("abc \ r \ n") का उपयोग करता हूं, तो प्रिंट ("abc \ n") या प्रिंट ("abc \ r")। मेरा मतलब यह है कि "यह काम नहीं करता" यह है कि readLine() समाप्त नहीं होगा क्योंकि ऐसा लगता है कि "newline" वर्ण नहीं दिख रहा है और यह अभी भी "\ r" या "\ n"जावा में प्रिंटवाइटर या किसी अन्य आउटपुट स्ट्रीम को नहीं पता " r n"

बनाने के लिए प्रतीक्षा कर रहा है ग्राहक:: सर्वर

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

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

    ServerSocket serverSocket = null; 
    try { 
     serverSocket = new ServerSocket(1234); 
    } catch (IOException e) { 
     System.err.println("Could not listen on port: 1234."); 
     System.exit(1); 
    } 

    Socket clientSocket = null; 
    try { 
     clientSocket = serverSocket.accept(); 
    } catch (IOException e) { 
     System.err.println("Accept failed."); 
    } 
    System.out.println("Connected"); 


    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

    String textFromClient; 
    textFromClient = in.readLine(); // read the text from client 
    System.out.println(textFromClient); 


    String textToClient = "Recieved"; 
    out.print(textToClient + "\r\n"); // send the response to client 

    out.close(); 
    in.close(); 
    clientSocket.close(); 
    serverSocket.close(); 
    } 
} 

:

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

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

    Socket socket = null; 
    PrintWriter out = null; 
    BufferedReader in = null; 
    BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); 

    try { 
     socket = new Socket("localhost", 1234); 
     out = new PrintWriter(socket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    } catch (UnknownHostException e) { 
     System.err.println("Don't know about host"); 
    } catch (IOException e) { 
     System.err.println("Couldn't get I/O for the connection"); 
    } 
    System.out.println("Connected"); 

    String textToServer; 

    textToServer=read.readLine(); 
    out.print(textToServer + "\r\n"); // send to server 

    System.out.println(in.readLine()); // read from server 

    out.close(); 
    in.close(); 
    read.close(); 
    socket.close(); 
    } 
} 

मैं प्रिंट() + "\ r \ n" के बजाय का उपयोग करना चाहते इसे और अधिक स्पष्ट है, मैं बस कुछ कोड निम्नलिखित में रखा जाएगा println() के कारण क्योंकि सर्वर प्रोग्राम जो मैं लिख रहा हूं, उसमें आवश्यकता है कि सर्वर से क्लाइंट को भेजे गए संदेश की आवश्यकता है अंत में "\ r \ n" है, उदाहरण के लिए। "यह सर्वर से क्लाइंट \ r \ n का संदेश है"। मुझे लगता है कि println() प्रिंट ("\ r \ n") जैसा ही है, इसलिए मुझे नहीं लगता कि मुझे println() + "\ r \ n" का उपयोग करना चाहिए, अन्यथा इसमें 2 न्यूलाइन होंगे। (हालांकि मुझे नहीं पता कि क्लाइंट साइड सर्वर से कैसे पढ़ेगा क्योंकि मुझे केवल सर्वर प्रोग्राम लिखने के लिए कहा जाता है। वे मेरे सर्वर प्रोग्राम का परीक्षण करने के लिए क्लाइंट साइड लिखेंगे।) हालांकि, मुझे संदेश भेजना है "\ आर \ n "अंत में लेकिन readLine() ऐसा नहीं लगता है। तो मैं इसके साथ क्या कर सकता था?

यदि आप मेरे प्रश्न को नहीं समझते हैं, तो आप उपरोक्त कोडों को आजमा सकते हैं और आपको पता चलेगा कि मेरा क्या मतलब है।

उत्तर

10

फ्लश() आप क्लाइंट से सर्वर तक लिखने के बाद:

out.print(textToServer + "\r\n"); // send to server 
out.flush(); // here, it should get you going. 

यह काम किया।

+2

आप अद्भुत हैं !!! मैं वास्तव में समझ में नहीं आता क्यों फ्लश() इसे काम करेगा हालांकि। मैंने यह भी पाया कि प्रिंटवाइटर आउट = नया प्रिंटवाइटर (clientSocket.getOutputStream(), सत्य); केवल println() ऑटो फ्लश करें लेकिन मुद्रित नहीं करें()। यही कारण है कि println() अपेक्षा के अनुसार काम करता है लेकिन प्रिंट नहीं()। धन्यवाद !! – Joey

2

VishalD के जवाब के शीर्ष पर, वहाँ println() का उपयोग कर या क्योंकि readline() वैसे भी \n के लिए लग रहा है \r\n साथ भेजने के बारे में चिंता करने की कोई ज़रूरत नहीं है। API से:

टेक्स्ट की एक पंक्ति पढ़ता है। लाइन लाइन ('\ n'), एक कैरिज रिटर्न ('\ r'), या एक कैरिज रिटर्न तुरंत लाइनफेड द्वारा पीछा किया जाता है।

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