2012-11-12 25 views
-2

我是新來的Java和試圖編寫一個程序使用數據報套接字發送&在客戶端和服務器之間接收數據包。問題是,當光標到達行時,它會卡在那裏直到數據包到達。在此期間,我怎樣才能將數據發送給對方?換句話說,我怎樣才能使用數據報套接字同時發送和接收?如何在Java中使用多線程在套接字編程中同時發送和接收數據?

+1

當你想同時並獨立地做某些事時,你需要使用多個線程。 –

+0

如果你可以分享一些有用的代碼。 – iwein

回答

4

您需要線程(或NIO/netty,但這是更先進的)。

基本上阻止IO(顧名思義)會在每次讀取/寫入操作時阻塞當前線程,如果它一次無法處理。因此你需要第二個線程來處理寫入。每個好的Java套接字教程都會包含一個多線程服務器的例子。

-1

看來你指的是異步I/O,雖然這確實是通過使用線程和插座(如前所述)實現,這是最好的做用NIO:http://en.wikipedia.org/wiki/New_I/O

它擴展好多了,是基於事件的,假設你對IO和網絡沒有多少經驗,這比多線程更容易理解。你可以通過使用Apache MINA來避免它的一些複雜性:http://mina.apache.org/

+0

你在這裏混淆了三個不同的東西。併發I/O在阻塞模式下使用多個線程,並受'java.net'包支持。 NIO和Netty支持非阻塞I/O。異步I/O使用完成回調,而不是線程,並在JDK 1.7中作爲NIO2引入。 – EJP

+0

感謝您的澄清! – javabeats

相關問題