Discussion:
[問題] Socket 的問題
(时间太久无法回复)
人各有志
2007-03-10 15:01:50 UTC
Permalink
我用了一個 ArrayList<OutputObjectStream> 來裝 Client 連入的 Output,

並且用 Thread 來處理,也就是有 Client 連入,就產生 ObjectOutputStream,

並且 add 到 ArrayList。



現在的問題是,我在處理文字的傳輸時,可以正常的運作沒有問題,

也就是 Output 出去的 String 都可以成功的傳送到 Client,如下:

for( OutputObjectStream out: arrayOfOutput){
out.writeObject( message );
}



但是當我在處理影像傳輸時,我照上述的原理來實做 Output,在某些過程中卻產生錯誤,

Server 啟動後,在尚未傳輸影像出去,Client 連入,然後開始傳送影像,都沒問題。

之後再產生一個 Client 連入 Server 後,卻在這段程式碼發出例外:

for( ObjectOutputStream out : arrayOfOutput){
out.writeObject(byteArrayStream.toByteArray());
}


基本上這段程式碼在處理已連入的 Client 是沒問題的,但是卻在新 Client 連入,

AraayList add 之後發出例外,請問這是什麼問題。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.86.117.97
人各有志
2007-03-10 15:35:13 UTC
Permalink
※ 引述《dream1129 ( 人各有志)》之銘言:
: 我用了一個 ArrayList<OutputObjectStream> 來裝 Client 連入的 Output,
: 並且用 Thread 來處理,也就是有 Client 連入,就產生 ObjectOutputStream,
: 並且 add 到 ArrayList。
: 現在的問題是,我在處理文字的傳輸時,可以正常的運作沒有問題,
: 也就是 Output 出去的 String 都可以成功的傳送到 Client,如下:
: for( OutputObjectStream out: arrayOfOutput){
: out.writeObject( message );
: }
: 但是當我在處理影像傳輸時,我照上述的原理來實做 Output,在某些過程中卻產生錯誤,
: Server 啟動後,在尚未傳輸影像出去,Client 連入,然後開始傳送影像,都沒問題。
: 之後再產生一個 Client 連入 Server 後,卻在這段程式碼發出例外:
: for( ObjectOutputStream out : arrayOfOutput){
: out.writeObject(byteArrayStream.toByteArray());
: }
: 基本上這段程式碼在處理已連入的 Client 是沒問題的,但是卻在新 Client 連入,
: AraayList add 之後發出例外,請問這是什麼問題。
發出的例外是
at java.util.AbstractList$Itr.next(Unknown Source)

請問是否要在哪邊多做處理?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.86.117.97
人各有志
2007-03-10 16:36:02 UTC
Permalink
※ 引述《dream1129 ( 人各有志)》之銘言:
: ※ 引述《dream1129 ( 人各有志)》之銘言:
: : 我用了一個 ArrayList<OutputObjectStream> 來裝 Client 連入的 Output,
: : 並且用 Thread 來處理,也就是有 Client 連入,就產生 ObjectOutputStream,
: : 並且 add 到 ArrayList。
: : 現在的問題是,我在處理文字的傳輸時,可以正常的運作沒有問題,
: : 也就是 Output 出去的 String 都可以成功的傳送到 Client,如下:
: : for( OutputObjectStream out: arrayOfOutput){
: : out.writeObject( message );
: : }
: : 但是當我在處理影像傳輸時,我照上述的原理來實做 Output,在某些過程中卻產生錯誤,
: : Server 啟動後,在尚未傳輸影像出去,Client 連入,然後開始傳送影像,都沒問題。
: : 之後再產生一個 Client 連入 Server 後,卻在這段程式碼發出例外:
: : for( ObjectOutputStream out : arrayOfOutput){
: : out.writeObject(byteArrayStream.toByteArray());
: : }
: : 基本上這段程式碼在處理已連入的 Client 是沒問題的,但是卻在新 Client 連入,
: : AraayList add 之後發出例外,請問這是什麼問題。
: 發出的例外是
: at java.util.AbstractList$Itr.next(Unknown Source)
: 請問是否要在哪邊多做處理?
文字模式時,兩個以上的 Client 是正常的!

Exception in thread "VFW TransferDataThread" java.util.ConcurrentModification\
Exception
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at johnson.finalproject.mcu.VideoJPanel.transferData(VideoJPanel.java:\
193)
at com.sun.media.protocol.vfw.VFWSourceStream.pushData(VFWSourceStream\
.java:578)
at com.sun.media.protocol.vfw.VFWSourceStream$TransferDataThread.run(V\
FWSourceStream.java:1138)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.86.117.97
人各有志
2007-03-10 18:45:00 UTC
Permalink
※ 引述《dream1129 ( 人各有志)》之銘言:
: ※ 引述《dream1129 ( 人各有志)》之銘言:
: : 發出的例外是
: : at java.util.AbstractList$Itr.next(Unknown Source)
: : 請問是否要在哪邊多做處理?
: 文字模式時,兩個以上的 Client 是正常的!
: Exception in thread "VFW TransferDataThread" java.util.ConcurrentModification\
: Exception
: at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
: at java.util.AbstractList$Itr.next(Unknown Source)
: at johnson.finalproject.mcu.VideoJPanel.transferData(VideoJPanel.java:\
: 193)
: at com.sun.media.protocol.vfw.VFWSourceStream.pushData(VFWSourceStream\
: .java:578)
: at com.sun.media.protocol.vfw.VFWSourceStream$TransferDataThread.run(V\
: FWSourceStream.java:1138)

感謝 ogamenewbie 的教導,確定是同步化的問題了,

剛剛測試結果確定可以多個 Client 了,

但是開到差不多第六個 Client 的時候就會又出問題了!

想請問一下這方面的問題,需要哪些相關知識,

請給我一些相關的提示!! 謝謝。

我希望可以開到 30 Clients 左右。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.86.117.97

Loading...