日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java套接字客户端_使用Java从客户端套接字读取数据(Read data from a client socket in Java)...

發布時間:2024/9/27 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java套接字客户端_使用Java从客户端套接字读取数据(Read data from a client socket in Java)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Java從客戶端套接字讀取數據(Read data from a client socket in Java)

我編寫了從客戶端套接字發送/接收數據的代碼。 發送數據步驟已成功完成,但是當我想從套接字讀取數據時, readLine()方法阻止程序,而沒有要讀取的數據。

這是我的代碼:

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()

感謝所有我可以讀取所有收到的數據,但readLine或read(byte [],int,int)方法在沒有數據要讀取時阻塞程序,而此方法必須在此時返回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

滿意答案

那是因為readLine()函數是一個阻塞調用,所以當然它會阻塞。

為了更具建設性,對readLine()類的方法的調用應該在一個單獨的線程中,這樣阻塞調用不會影響代碼的其余部分。 從正在閱讀的類中,我建議創建一個純粹用于控制從套接字讀取的線程。

我將傳遞對創建類的引用,以便如果線程接收信息,父類可以使用它。

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

相關問答

in.readLine()在看到行終止符之前不會返回。 除非PHP中的socket_write隱式添加行終止符,否則您需要自己執行此操作,以便Java端看到您編寫了完整的文本行。 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 ...

您關閉了套接字然后繼續使用它。 try-with-resource語句關閉了套接字; 你開始的兩個線程繼續使用它。 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.

你正在讀行,但你不是在寫行。 您需要為每個已發送的消息添加行終止符。 You're reading lines but you aren't writing lines. You need to add a line terminator to each sent message.

您應該使用OutputStream來編寫二進制數據,而不是PrintWriter 。 You should be using an OutputStream to write binary data, not a PrintWriter.

嘗試在郵件末尾添加\n 。 也不要將'NoDelay`設置為false。 你正在進行異步發送。 Try adding a \n to the end of the message. Also do not set 'NoDelay` to false. You are doing an asynchronous send.

你的腳本運行正常,并且對你正在尋找的東西沒有很大的缺陷。 由于從命令行而不是Web瀏覽器運行腳本時獲得了所需的結果,因此我們可以查明問題的原因:HTTP協議 HTTP不是用于持續連接(就像你習慣使用Java套接字一樣),但它的簡化工作流程基于Request / Elaborate / Response / Forget。 因此,您無法與純HTML / PHP over HTTP解決方案進行“實時聊天”。 唉,并非所有的希望都失去了! 要實現“實時”通信,您可以使用Ajax,這不是很難習慣。 我說“...

我對客戶端和服務器通信方式之間的差異非常好奇。 例如,客戶端使用Scanner讀取輸入,而服務器使用BufferedReader (這是我個人的偏好)。 只是一個建議:保持一致。 現在 - 首先,客戶端只發送一條消息,但隨后開始在無限循環中無限期地讀取。 看到你確切地知道服務器在向它發送“HELO”之后應該如何響應(它應該用一行響應,“DERP”),沒有理由在任何類型的循環中從服務器讀取。 服務器上存在同樣的問題。 由于客戶端現在是,它總是只向服務器發送一行(“HELO”)。 因此,服務器應該只期...

我們需要在這里綁定嗎? 或者僅僅是因為我們想要引用本地端口? 您不需要綁定客戶端SocketChannel。 s.connect(someAddr)

如果返回true,則javadocs表示已建立連接。 這是否意味著我不需要調用finishConnect()? 正確。 從我讀到的,這是本地連接,但它沒有指定遠程連接是否可能立即返回true。 它可以隨時返回true,你必須檢查。 這是客戶端向服務器發送SYN的位置嗎? 是。 服務器通過一些serverSocketChannel.accept()獲...

那是因為readLine()函數是一個阻塞調用,所以當然它會阻塞。 為了更具建設性,對readLine()類的方法的調用應該在一個單獨的線程中,這樣阻塞調用不會影響代碼的其余部分。 從正在閱讀的類中,我建議創建一個純粹用于控制從套接字讀取的線程。 我將傳遞對創建類的引用,以便如果線程接收信息,父類可以使用它。 That's because the readLine() function is a blocking call, so of course it's going to block. To...

相關文章

用java編寫的一個socket服務端,通過一個tcp測試工具測試這個服務端,發現發送數據給服務端,服

...

Spring Data: a new perspective of data operations

...

是從網上找到的聊天程序 有服務器和客戶端, 在注冊完之后出現 java.io.StreamCorrup

...

Data Week: Becoming a data scientist Data Pointed,

...

java keytool生成的證書是CRT等格式的,這種格式是2進制編碼的,而C++用的證書格式是pe

...

清明假期翻以前的筆記發現有一些NoSQL相關的內容,比較零散,是之前讀《Big Data Glossa

...

Datanode中包含DataXceiverServer。DataXceiverServer是一個so

...

簡介 SolrJ是操作Solr的JAVA客戶端,它提供了增加、修改、刪除、查詢Solr索引的JAV

...

solr 的 data import 導入 mysql數據 (1)、編輯 example/solr/c

...

As you know, I've been playing with Solr lately, tr

...

最新問答

如果啟用了復制處理程序,請確保將其置于其中一個安全角色之后。 我見過人們做的另一件事是在不同的端口上運行admin。 最好在需要auth的頁面上使用SSL,這樣你就不會發送明確的密碼,因此管理和復制將發生在8443上,而常規查詢將在8080上發生。 如果您要簽署自己的證書,請查看此有用的SO頁面: 如何在特定連接上使用不同的證書? I didn't know that /admin was the context for SOLR admin because /admin does not re

第一:在您的樣本中,您有: 但是你在詢問 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大寫'T')。 xpath區分大小寫。 第二:通過查詢// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一個'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;

問題是,在啟用Outlook庫引用的情況下, olMailItem是一個保留常量,我認為當您將Dim olMailItem as Outlook.MailItem ,這不是問題,但是嘗試設置變量會導致問題。 以下是完整的解釋: 您已將olMailItem聲明為對象變量。 在賦值語句的右側,在將其值設置為對象的實例之前,您將引用此Object 。 這基本上是一個遞歸錯誤,因為你有對象試圖自己分配自己。 還有另一個潛在的錯誤,如果之前已經分配了olMailItem ,這個語句會引發另一個錯誤(可能是

我建議使用wireshark http://www.wireshark.org/通過記錄(“捕獲”)設備可以看到的網絡流量副本來“監聽”網絡上發生的對話。 當您開始捕獲時,數據量似乎過大,但如果您能夠發現任何看起來像您的SOAP消息的片段(應該很容易發現),那么您可以通過右鍵單擊并選擇來快速過濾到該對話'關注TCP Stream'。 然后,您可以在彈出窗口中查看您編寫的SOAP服務與Silverlight客戶端之間的整個對話。 如果一切正常,請關閉彈出窗口。 作為一個額外的好處,wireshar

Android默認情況下不提供TextView的合理結果。 您可以使用以下庫并實現適當的aligntment。 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。 以下是我編譯和運行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV

12個十六進制數字(帶前導0x)表示48位。 那是256 TB的虛擬地址空間。 在AMD64上閱讀wiki(我假設你在上面,對嗎?)架構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

這將取決于你想要的。 對象有兩種屬性:類屬性和實例屬性。 類屬性 類屬性對于類的每個實例都是相同的對象。 class MyClass: class_attribute = [] 這里已經為類定義了MyClass.class_attribute ,您可以使用它。 如果您創建MyClass實例,則每個實例都可以訪問相同的class_attribute 。 實例屬性 instance屬性僅在創建實例時可用,并且對于類的每個實例都是唯一的。 您只能在實例上使用它們。 在方法__init__中定

總結

以上是生活随笔為你收集整理的java套接字客户端_使用Java从客户端套接字读取数据(Read data from a client socket in Java)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。