2009-07-24 12 views
15

प्राप्त करते हैं, मैं जावा सॉकेट के माध्यम से ग्राहक के लिए एक बाइट सरणी भेजसॉकेट भेजने और सर्वर में बाइट सरणी

byte[] message = ... ; 

DataOutputStream dout = new DataOutputStream(client.getOutputStream()); 
dout.write(message); 

मैं ग्राहक से इस बाइट सरणी कैसे प्राप्त कर सकते हैं?

उत्तर

6

पहले, DataOutputStream का उपयोग नहीं करते, जब तक कि यह वास्तव में आवश्यक है। दूसरा:

Socket socket = new Socket("host", port); 
OutputStream socketOutputStream = socket.getOutputStream(); 
socketOutputStream.write(message); 

बेशक इसमें कोई त्रुटि जांच नहीं है लेकिन यह आपको जाना चाहिए। JDK API Javadoc आपका मित्र है और आपकी मदद कर सकता है।

+2

मैं नहीं दिख रहा है कि यह कैसे भेजने के उत्तर देता है ** और एक ही सॉकेट पर ** प्राप्त करते हुए। – m0skit0

+4

डेटाऑटपुटस्ट्रीम का उपयोग क्यों न करें? क्या यह कुछ महत्वपूर्ण ओवरहेड जोड़ रहा है? – vach

3

एक JDK सॉकेट ट्यूटोरियल here, जो दोनों सर्वर और ग्राहक अंत को शामिल किया गया है। यह वही दिखता है जो आप चाहते हैं।

(कि ट्यूटोरियल से) यह एक गूंज सर्वर से पढ़ने के लिए सेट:

echoSocket = new Socket("taranis", 7); 
    out = new PrintWriter(echoSocket.getOutputStream(), true); 
    in = new BufferedReader(new InputStreamReader(
           echoSocket.getInputStream())); 

बाइट्स की एक धारा लेने और धर्मान्तरित तार करने के लिए पाठक के माध्यम से और एक डिफ़ॉल्ट एन्कोडिंग का उपयोग (उचित नहीं, सामान्य रूप से)।

ऊपर से छोड़े गए सॉकेट/स्ट्रीम को संभालने और बंद करने में त्रुटि, लेकिन ट्यूटोरियल की जांच करें।

+2

BufferedReader आपको बाइट के रूप में इनपुट पढ़ने की अनुमति नहीं देता है [] क्या यह करता है? – user12345613

1

आप या तो संदेश एक निश्चित आकार के होने की आवश्यकता है, या आप आकार भेजने की जरूरत है या आप किसी विभाजक वर्ण का उपयोग करने की जरूरत है।

in = new DataInputStream(server.getInputStream()); 
byte[] message = new byte[100]; // the well known size 
in.readFully(message); 

इस मामले में DataInputStream समझ में आता है के रूप में यह readFully() प्रदान करता है:

यह (100 बाइट्स) एक ज्ञात आकार के लिए सबसे आसान मामला है। यदि आप इसका उपयोग नहीं करते हैं, तो आपको बाइट्स की अपेक्षित संख्या पढ़ने तक स्वयं को लूप करने की आवश्यकता है।

45

इसे आज़माएं, यह मेरे लिए काम कर रहा है।

प्रेषक:

byte[] message = ... 
Socket socket = ... 
DataOutputStream dOut = new DataOutputStream(socket.getOutputStream()); 

dOut.writeInt(message.length); // write length of the message 
dOut.write(message);   // write the message 


रिसीवर:

Socket socket = ... 
DataInputStream dIn = new DataInputStream(socket.getInputStream()); 

int length = dIn.readInt();     // read length of incoming message 
if(length>0) { 
    byte[] message = new byte[length]; 
    dIn.readFully(message, 0, message.length); // read the message 
} 
+1

dOut.writeInt (message.length); और dOut.write (संदेश); विजेता है धन्यवाद @franta –

+0

धन्यवाद, मेरा बहुत समय बचाया –

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