मेरे पास जावा एप्लिकेशन है जो वीओआईपी है। मैं थ्रेड के माध्यम से एक ही समय में जानकारी भेजने और प्राप्त करने के लिए एक सॉकेट का उपयोग कर रहा हूं। कोड .. नीचे दिखाया गया हैक्या आप एक ही समय में एक सॉकेट इनपुट और आउटपुट स्ट्रीम लिख सकते हैं?
Socket clientSocket = sockList.accept();
OutputStream outSock = clientSocket.getOutputStream();
InputStream inSock = clientSocket.getInputStream();
new Thread(new Capture(outSock)).start();
new Thread(new PlayAudio(inSock)).start();
outSock.close();
clientSocket.close();
समस्या यह है कि मैं खोज रहा हूँ यह है कि जब मैं outputstream को लिखने, यह पहली लिखने पर ब्लॉक। मैं कई बाइट नहीं भेज रहा हूँ। भाई मेरा लेखन कोड है।
private class Capture implements Runnable{
private OutputStream out;
public Capture(OutputStream out){
this.out = out;
}
@Override
public void run() {
try{
int numBytesRead;
TargetDataLine outLine = getMic();
outLine.open();
outLine.start();
byte[] data = new byte[outLine.getBufferSize()/5];
byte[] test = {0x1,0x1,0x1};
while(true) {
//numBytesRead = outLine.read(data, 0, data.length);
//System.out.println(numBytesRead);
out.write(test, 0, test.length);
out.flush();
/*if(numBytesRead > 0){
out.write(data, 0, data.length);
System.out.println("C");
}*/
}
}catch(Exception ex){}
}
}
अन्य धागा है कि पढ़ता ध्वनि कोड है ...
private class PlayAudio implements Runnable{
private InputStream in;
public PlayAudio(InputStream in){
this.in = in;
}
@Override
public void run() {
int write;
try{
SourceDataLine inLine = getSpeaker();
inLine.open();
inLine.start();
byte[] data = new byte[inLine.getBufferSize()];
byte[] test = new byte[3];
while(true){
System.out.println(1);
//write = in.read(data, 0, data.length);
in.read(test, 0 , test.length);
System.out.println(2);
/*if(write > 0){
inLine.write(data, 0, write);
System.out.println(3);
System.out.println(write);
}*/
}
} catch(Exception ex){}
}
}
मैं वास्तविक कोड का एक अच्छा भाग टिप्पणी की है के बाद से मैं सिर्फ यह काम करने के लिए प्राप्त करने की कोशिश कर रहा हूँ। मेरा लेखन कार्य पहले लिखने पर अनिश्चित काल तक ब्लॉक करता है। क्या यह संभव है कि यह मेरे धागे के साथ एक समस्या हो सकती है? मेरा एकमात्र विचार यह है कि आउटपुट और इनपुट स्ट्रीम मेरी सॉकेट ऑब्जेक्ट साझा कर रही हैं जो डेडलॉक या कुछ कारण बन सकती है। कृपया मुझे बताएं कि क्या हो रहा है।
मैंने सोचा कि चूंकि अंदर और बाहर (दो अलग-अलग धाराएं) अलग-अलग वस्तुएं हैं, एक ही समय में उन पर परिचालन करना कोई फर्क नहीं पड़ता। तो आपकी कहानियां मुझे अभी भी सिंक्रनाइज़ेशन के बारे में चिंतित होना चाहिए, भले ही? –