java套接字客户端_使用Java从客户端套接字读取数据(Read data from a client socket in Java)...
使用Java從客戶端套接字讀取數(shù)據(jù)(Read data from a client socket in Java)
我編寫(xiě)了從客戶端套接字發(fā)送/接收數(shù)據(jù)的代碼。 發(fā)送數(shù)據(jù)步驟已成功完成,但是當(dāng)我想從套接字讀取數(shù)據(jù)時(shí), readLine()方法阻止程序,而沒(méi)有要讀取的數(shù)據(jù)。
這是我的代碼:
StringBuffer document = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
document.append(line + "\n");
reader.close()
感謝所有我可以讀取所有收到的數(shù)據(jù),但readLine或read(byte [],int,int)方法在沒(méi)有數(shù)據(jù)要讀取時(shí)阻塞程序,而此方法必須在此時(shí)返回null / -1。
I have written the code for sending/receiving data from a client socket. The sending data step has been done successfully, but when I want to read the data from a socket, the readLine() method block program while there isn't data to be read.
This is my code:
StringBuffer document = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
document.append(line + "\n");
reader.close()
thanks all I can read all received data, but readLine or read(byte[], int, int) methods block program when there is no data to read, while this method must return null/-1 in this time.
原文:https://stackoverflow.com/questions/11390847
2020-07-15 21:07
滿意答案
那是因?yàn)閞eadLine()函數(shù)是一個(gè)阻塞調(diào)用,所以當(dāng)然它會(huì)阻塞。
為了更具建設(shè)性,對(duì)readLine()類(lèi)的方法的調(diào)用應(yīng)該在一個(gè)單獨(dú)的線程中,這樣阻塞調(diào)用不會(huì)影響代碼的其余部分。 從正在閱讀的類(lèi)中,我建議創(chuàng)建一個(gè)純粹用于控制從套接字讀取的線程。
我將傳遞對(duì)創(chuàng)建類(lèi)的引用,以便如果線程接收信息,父類(lèi)可以使用它。
That's because the readLine() function is a blocking call, so of course it's going to block.
To be more constructive, calls to methods like readLine() should be in a separate thread so that the blocking call does not affect the rest of your code. From the class which is reading, I would recommend creating a thread purely to control reading from the socket.
I would pass a reference to the creating class so that if the thread receives information, the parent class can use it.
2012-07-11
相關(guān)問(wèn)答
in.readLine()在看到行終止符之前不會(huì)返回。 除非PHP中的socket_write隱式添加行終止符,否則您需要自己執(zhí)行此操作,以便Java端看到您編寫(xiě)了完整的文本行。 in.readLine() won't return until it sees a line terminator. Unless socket_write in PHP implicitly adds a line terminator, you'll need to do so yourself, so that ...
您關(guān)閉了套接字然后繼續(xù)使用它。 try-with-resource語(yǔ)句關(guān)閉了套接字; 你開(kāi)始的兩個(gè)線程繼續(xù)使用它。 You closed the socket and then continued to use it. The try-with-resource statement closed the socket; the two threads you started continued to use it.
你正在讀行,但你不是在寫(xiě)行。 您需要為每個(gè)已發(fā)送的消息添加行終止符。 You're reading lines but you aren't writing lines. You need to add a line terminator to each sent message.
您應(yīng)該使用OutputStream來(lái)編寫(xiě)二進(jìn)制數(shù)據(jù),而不是PrintWriter 。 You should be using an OutputStream to write binary data, not a PrintWriter.
嘗試在郵件末尾添加\n 。 也不要將'NoDelay`設(shè)置為false。 你正在進(jìn)行異步發(fā)送。 Try adding a \n to the end of the message. Also do not set 'NoDelay` to false. You are doing an asynchronous send.
你的腳本運(yùn)行正常,并且對(duì)你正在尋找的東西沒(méi)有很大的缺陷。 由于從命令行而不是Web瀏覽器運(yùn)行腳本時(shí)獲得了所需的結(jié)果,因此我們可以查明問(wèn)題的原因:HTTP協(xié)議 HTTP不是用于持續(xù)連接(就像你習(xí)慣使用Java套接字一樣),但它的簡(jiǎn)化工作流程基于Request / Elaborate / Response / Forget。 因此,您無(wú)法與純HTML / PHP over HTTP解決方案進(jìn)行“實(shí)時(shí)聊天”。 唉,并非所有的希望都失去了! 要實(shí)現(xiàn)“實(shí)時(shí)”通信,您可以使用Ajax,這不是很難習(xí)慣。 我說(shuō)“...
我對(duì)客戶端和服務(wù)器通信方式之間的差異非常好奇。 例如,客戶端使用Scanner讀取輸入,而服務(wù)器使用BufferedReader (這是我個(gè)人的偏好)。 只是一個(gè)建議:保持一致。 現(xiàn)在 - 首先,客戶端只發(fā)送一條消息,但隨后開(kāi)始在無(wú)限循環(huán)中無(wú)限期地讀取。 看到你確切地知道服務(wù)器在向它發(fā)送“HELO”之后應(yīng)該如何響應(yīng)(它應(yīng)該用一行響應(yīng),“DERP”),沒(méi)有理由在任何類(lèi)型的循環(huán)中從服務(wù)器讀取。 服務(wù)器上存在同樣的問(wèn)題。 由于客戶端現(xiàn)在是,它總是只向服務(wù)器發(fā)送一行(“HELO”)。 因此,服務(wù)器應(yīng)該只期...
我們需要在這里綁定嗎? 或者僅僅是因?yàn)槲覀兿胍帽镜囟丝?#xff1f; 您不需要綁定客戶端SocketChannel。 s.connect(someAddr)
如果返回true,則javadocs表示已建立連接。 這是否意味著我不需要調(diào)用finishConnect()? 正確。 從我讀到的,這是本地連接,但它沒(méi)有指定遠(yuǎn)程連接是否可能立即返回true。 它可以隨時(shí)返回true,你必須檢查。 這是客戶端向服務(wù)器發(fā)送SYN的位置嗎? 是。 服務(wù)器通過(guò)一些serverSocketChannel.accept()獲...
那是因?yàn)閞eadLine()函數(shù)是一個(gè)阻塞調(diào)用,所以當(dāng)然它會(huì)阻塞。 為了更具建設(shè)性,對(duì)readLine()類(lèi)的方法的調(diào)用應(yīng)該在一個(gè)單獨(dú)的線程中,這樣阻塞調(diào)用不會(huì)影響代碼的其余部分。 從正在閱讀的類(lèi)中,我建議創(chuàng)建一個(gè)純粹用于控制從套接字讀取的線程。 我將傳遞對(duì)創(chuàng)建類(lèi)的引用,以便如果線程接收信息,父類(lèi)可以使用它。 That's because the readLine() function is a blocking call, so of course it's going to block. To...
相關(guān)文章
用java編寫(xiě)的一個(gè)socket服務(wù)端,通過(guò)一個(gè)tcp測(cè)試工具測(cè)試這個(gè)服務(wù)端,發(fā)現(xiàn)發(fā)送數(shù)據(jù)給服務(wù)端,服
...
Spring Data: a new perspective of data operations
...
是從網(wǎng)上找到的聊天程序 有服務(wù)器和客戶端, 在注冊(cè)完之后出現(xiàn) java.io.StreamCorrup
...
Data Week: Becoming a data scientist Data Pointed,
...
java keytool生成的證書(shū)是CRT等格式的,這種格式是2進(jìn)制編碼的,而C++用的證書(shū)格式是pe
...
清明假期翻以前的筆記發(fā)現(xiàn)有一些NoSQL相關(guān)的內(nèi)容,比較零散,是之前讀《Big Data Glossa
...
Datanode中包含DataXceiverServer。DataXceiverServer是一個(gè)so
...
簡(jiǎn)介 SolrJ是操作Solr的JAVA客戶端,它提供了增加、修改、刪除、查詢Solr索引的JAV
...
solr 的 data import 導(dǎo)入 mysql數(shù)據(jù) (1)、編輯 example/solr/c
...
As you know, I've been playing with Solr lately, tr
...
最新問(wèn)答
如果啟用了復(fù)制處理程序,請(qǐng)確保將其置于其中一個(gè)安全角色之后。 我見(jiàn)過(guò)人們做的另一件事是在不同的端口上運(yùn)行admin。 最好在需要auth的頁(yè)面上使用SSL,這樣你就不會(huì)發(fā)送明確的密碼,因此管理和復(fù)制將發(fā)生在8443上,而常規(guī)查詢將在8080上發(fā)生。 如果您要簽署自己的證書(shū),請(qǐng)查看此有用的SO頁(yè)面: 如何在特定連接上使用不同的證書(shū)? I didn't know that /admin was the context for SOLR admin because /admin does not re
第一:在您的樣本中,您有: 但是你在詢問(wèn) //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大寫(xiě)'T')。 xpath區(qū)分大小寫(xiě)。 第二:通過(guò)查詢// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一個(gè)'td'元素,而它們是兄弟姐妹。 有很多方法可以在這里獲得制作和模型
這是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;
問(wèn)題是,在啟用Outlook庫(kù)引用的情況下, olMailItem是一個(gè)保留常量,我認(rèn)為當(dāng)您將Dim olMailItem as Outlook.MailItem ,這不是問(wèn)題,但是嘗試設(shè)置變量會(huì)導(dǎo)致問(wèn)題。 以下是完整的解釋: 您已將olMailItem聲明為對(duì)象變量。 在賦值語(yǔ)句的右側(cè),在將其值設(shè)置為對(duì)象的實(shí)例之前,您將引用此Object 。 這基本上是一個(gè)遞歸錯(cuò)誤,因?yàn)槟阌袑?duì)象試圖自己分配自己。 還有另一個(gè)潛在的錯(cuò)誤,如果之前已經(jīng)分配了olMailItem ,這個(gè)語(yǔ)句會(huì)引發(fā)另一個(gè)錯(cuò)誤(可能是
我建議使用wireshark http://www.wireshark.org/通過(guò)記錄(“捕獲”)設(shè)備可以看到的網(wǎng)絡(luò)流量副本來(lái)“監(jiān)聽(tīng)”網(wǎng)絡(luò)上發(fā)生的對(duì)話。 當(dāng)您開(kāi)始捕獲時(shí),數(shù)據(jù)量似乎過(guò)大,但如果您能夠發(fā)現(xiàn)任何看起來(lái)像您的SOAP消息的片段(應(yīng)該很容易發(fā)現(xiàn)),那么您可以通過(guò)右鍵單擊并選擇來(lái)快速過(guò)濾到該對(duì)話'關(guān)注TCP Stream'。 然后,您可以在彈出窗口中查看您編寫(xiě)的SOAP服務(wù)與Silverlight客戶端之間的整個(gè)對(duì)話。 如果一切正常,請(qǐng)關(guān)閉彈出窗口。 作為一個(gè)額外的好處,wireshar
Android默認(rèn)情況下不提供TextView的合理結(jié)果。 您可以使用以下庫(kù)并實(shí)現(xiàn)適當(dāng)?shù)腶ligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/
你的代碼適合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我將它下載到c:\ temp \ apples.java。 以下是我編譯和運(yùn)行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV
12個(gè)十六進(jìn)制數(shù)字(帶前導(dǎo)0x)表示48位。 那是256 TB的虛擬地址空間。 在AMD64上閱讀wiki(我假設(shè)你在上面,對(duì)嗎?)架構(gòu)http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar
這將取決于你想要的。 對(duì)象有兩種屬性:類(lèi)屬性和實(shí)例屬性。 類(lèi)屬性 類(lèi)屬性對(duì)于類(lèi)的每個(gè)實(shí)例都是相同的對(duì)象。 class MyClass: class_attribute = [] 這里已經(jīng)為類(lèi)定義了MyClass.class_attribute ,您可以使用它。 如果您創(chuàng)建MyClass實(shí)例,則每個(gè)實(shí)例都可以訪問(wèn)相同的class_attribute 。 實(shí)例屬性 instance屬性僅在創(chuàng)建實(shí)例時(shí)可用,并且對(duì)于類(lèi)的每個(gè)實(shí)例都是唯一的。 您只能在實(shí)例上使用它們。 在方法__init__中定
總結(jié)
以上是生活随笔為你收集整理的java套接字客户端_使用Java从客户端套接字读取数据(Read data from a client socket in Java)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: js获取字符串出现次数最多_js如何获取
- 下一篇: java反射 虚拟机优化_面试官问我:J