2012-04-11 15 views
5

मैं सर्वर और ग्राहक की स्थापना की है, जो मूल रूप से एक बुनियादी पाठ ईमेल प्रणाली है। मैं वर्तमान में सर्वर और क्लाइंट के बीच पाठ भेजने के लिए प्रिंटवाइटर का उपयोग कर रहा हूं। मैं एक अटैचमेंट आधारित सिस्टम बनाने की कोशिश कर रहा हूं और ऐसा करने के लिए मैं ऑब्जेक्टऑटपुटस्ट्रीम का उपयोग कर रहा हूं।ObjectOutputStream और PrintWriter संघर्ष

private static PrintWriter output; 
private static ObjectOutputStream outStream; 

public ClientHandler(Socket socket) throws IOException 
{ 
    client = socket; 
    outStream = new ObjectOutputStream(client.getOutputStream()); 
    input = new Scanner(client.getInputStream()); 
    output = new PrintWriter(client.getOutputStream(), true); 
} 

मैं वर्तमान समस्या अगर मैं किसी कारण अतिरिक्त वर्ण पाठ की शुरुआत भेज दिया जाता है कि में जोड़ दिया जाएगा के लिए उत्पादन printwriter के माध्यम से संदेश भेजने की कोशिश जहां है, कार्यक्रम प्रमुख शब्दों पहचान नहीं कर सकते जिसका अर्थ है पारित किया जा रहा ग्राहक को प्रिंटराइटर के माध्यम से। अगर मैं आउटस्ट्रीम ऑब्जेक्ट के निर्माण पर टिप्पणी करता हूं तो समस्या रुक जाएगी।

किसी को भी मेरे संघर्ष के इस समस्या को हल करने की कोशिश करना किसी भी सलाह दे सकते हैं?

+0

आप 'PrintWriter' या' PrintStream' का उपयोग कभी नहीं करना चाहिए जब तक आप हर के बाद checkError() कॉल करने के लिए तैयार कर रहे हैं मैं/हे, और फिर अपवाद के बजाय द्विआधारी त्रुटि राज्यों के साथ प्रस्तुत करने के लिए तैयार हैं। – EJP

उत्तर

4

इस अतिरिक्त पाठ वस्तु उत्पादन धारा से आ रहा है।

ही outputstream के लिए एक ObjectOutputStream और एक PrintStream अटैच किया जा रहा मूल रूप से काम करने के लिए सिर्फ कभी नहीं जा रहा है। आपको 1 या दूसरे का उपयोग करने के लिए समाधान के साथ आना होगा। केवल एक प्रिंटस्ट्रीम का उपयोग करने के लिए, आप अपने ऑब्जेक्ट को जेएसओएन या एक्सएमएल में परिवर्तित करने पर विचार कर सकते हैं। दूसरी तरफ, आप ऑब्जेक्टऑटपुटस्ट्रीम का उपयोग कर सकते हैं और ऑब्जेक्टऑटपुटस्ट्रीम

+1

कई ट्राई/कैच बाद में ... मैं अपने दम पर सिर्फ ObjectOutputStream उपयोग करने का फैसला। शीघ्र उत्तर के लिए धन्यवाद। –

+0

क्या आप समझा सकते हैं कि दो धाराओं का उपयोग क्यों नहीं कर सकता? क्या यह बफरिंग के कारण है? – Kevin

0

ObjectOutputStream केवल कि चैनल पर एक ObjectOutputStream के रूप में इस्तेमाल किया जाना चाहिए। यदि आपको वास्तव में इसकी आवश्यकता है तो PrintWriter किसी अन्य सॉकेट पर उपयोग करें।

0

अपने क्लाइंट हैंडलर को बढ़ाएं और फ़ाइल ट्रांसफर को संभालने के लिए कोड शामिल करने के लिए कन्स्ट्रक्टर को ओवरराइट करें। दो बंदरगाह खोलें, एक पाठ के लिए और दूसरा फ़ाइल स्थानान्तरण के लिए।

private static PrintWriter output; 

public ClientHandler(Socket socket) throws IOException 
{ 
    client = socket; 
    input = new Scanner(client.getInputStream()); 
    output = new PrintWriter(client.getOutputStream(), true); 
} 

private static ObjectOutputStream outStream; 

public ClientFileHandler(Socket socket) extends ClientHandler throws IOException 
{ 
    client = socket; 
    outStream = new ObjectOutputStream(client.getOutputStream()); 

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