A. socket怎麼分段傳輸大數據
如何將java中class文件反編譯成java文件
jad:反編譯工具下載
jad:反編譯工具
可以將class文件反編譯成java文件
假設將jad.exe安裝在f:/java/jad目錄下
把要反編譯的文件*.class復制到此目錄下,接著接以下步驟,
在命令行窗口環境中進入jad目錄,
然後運行:jad -s java *.class (附,*.class指要反編譯的文件名)
如果*.class文件和jad程序不在同一個目錄,就要用到path環境變數,
將jad 所在目錄加到path路徑中即可:set path=%path%;f:/java/jad
ouznetsov開發,目前最新版本為0.2.5.它由 C++開發,並且官方可以下載 windows、linux和蘋果Mac Os三個平台的可執行程序。
如何將現有的web程序導入到myeclipse環境中去
如果要將別人發布的war包,導入到自己的eclipse環境中進行再開發,最快的方法如下:
1、新建一個myeclipse的web project。
2、右鍵該工程,myeclipse/add struts capability,設置成struts開發環境。
3、將war包解壓,全目錄覆蓋新工程的WebRoot(包括其中的w www.cshangzj.com eb-inf/meta-inf目錄),相應的scr目錄(或者對應的包含java文件的目錄)覆蓋eclipse的src目錄。myeclipse會自動將WEB-INF\lib下的jar包作為放到classpath中的。
4、refresh該工程,over。
JAVA語言是1995年5月由SUN公司發布的,由於其安全性高、代碼優化、跨平台等特性,迅速取代了很多傳統高級語言,占據了企業級網路應用開發等諸多領域的霸主地位。 不過,JAVA最突出的跨平台優勢使得它不能被編譯成本。
JAVA語言是1995年5月由SUN公司發布的,由於其安全性高、代碼優化、跨平台等特性,迅速取代了很多傳統高級語言,占據了企業級網路應用開發等諸多領域的霸主地位。
不過,JAVA最突出的跨平台優勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運行在虛擬機環境中,這使得JAVA的反編譯要比別的高級語言容易實現,並且反編譯的代碼經過優化後幾乎可以與源代碼相媲美。
為了更好地保護知識產權,避免本公司的智力成果輕易被人竊取,開發者有必要對反編譯工具深入了解,以便有針對性地採取保護措施。
目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品:
一、 應用廣泛的JAD
B. QTsocket的接收問題,用Linux發送數組數據時,QTsocket接收錯誤
接收函數內,一開始就readAll(),已經把數據都讀取了,所以後面就沒有可讀數據了,所以後面不用判斷bytesAvaliables()。
接收的時候,不要直接接收到QString中。應該先讀取一個長度值(quint16),再根據長度值去讀取QByteArray,再把讀取到的QByteArray放到QString中。然後再判斷bytesAvaliables是否還有剩餘。有剩餘,就再接收長度值+QByteArray。。。。
C. socket發送大量數據時如何接收
只要是接收端 你都應該不停的等待消息 ,接受消息的那一段可以這樣寫 while(true) { try{ Thread.sleep(300);}catch(Excepion e){} //注意這里的inStream是DataInputStream 當然你也可以加以裝飾 String message= inStream.readUTF(); if(message!=null) { System.out.println("收到消息:"+message); } } 只有這樣才能不斷從發送端收到消息,這段代碼只是給你一個提示,有問題給我留言,通常為了程序的合理性 最好把這段代碼寫進一個線程裡面,這樣更合理
D. qt socket編程問題,不能接收數據,懂的幫忙解答一下,謝謝了。
接收函數內,一開始就readAll(),已經把數據都讀取了,所以後面就沒有可讀數據了,所以後面不用判斷bytesAvaliables()。
接收的時候,不要直接接收到QString中。應該先讀取一個長度值(quint16),再根據長度值去讀取QByteArray,再把讀取到的QByteArray放到QString中。然後再判斷bytesAvaliables是否還有剩餘。有剩餘,就再接收長度值+QByteArray。。。。
E. Qt 2個線程共用1個Socket 分別收發數據可以嗎
1:socket句柄就是一個整型,是映射到系統句柄隊列裡面(你可以認為這個值是一個key,一個key對應一個系統的具體socket結構體),指針是無意義的,比方你創建了一個socket句柄值是10,你直接使用10在任何線程都是調用這個socket,這個映射過程是socket相關api內部完成的,是全局的。
2:多個線程共用一個socket分別處理收發是可以的,很多這樣的例子,一些網路IO模型就是一個部分線程負責收數據包,部分線程負責發響應包,但不要多個線程共用一個socket來收,這樣會導致問題。
3:你要多線程共享socket句柄,直接傳值就行了,不要傳引用和指針,不過注意socket關閉的同步處理。最好用一個對象來統一處理每個socket的打開和關閉,讀取和發送。所有線程拿著這個對象來操作socket,這樣socket的有效性判斷都在對象裡面處理。不然一個線程關閉了socket,子線程不知道繼續拿著這個句柄號在操作就會出問題。
F. qt socket讀取有最大長度限制嗎
有的,發送時把數據長度放到數據頭部,數據長度占的位數用一個兩位數表示,11表示1位,12表示2位。。。
16157225data......
這樣在readyRead()信號對應槽函數里解析,QByteArray qba 定義成成員變數;
append(m_tcpSocket->readAll())後如果長度不等於157225+2+6就繼續,等於就表示這次接收結束了。
G. 利用qt tcpsocket接受大數據包,但是數據只能接受至5k,之後的數據丟失嚴重,求指教!
對於大數據包 建議還是分段傳送 也就是你要自己寫一個關於發送接收的回協議 一次性讀取或者答發送是一個不太好的做法 雖然TCP在發送過程中會有數據的驗證什麼的 但是如果緩沖區一下子就滿了 起始還是會丟失部分數據的
建議分段發送跟分段接收
既由客戶端來決定發送的頻率 (假定1M的數據包 分段稱8K的一個小包 那麼就變成 發送128次 在客戶端接收到其中的一個包假定是第N個 在接收完了 並且驗證數據是正確的時候 那麼就在客戶端發送給服務端一個請求的數據包 讓伺服器發送第N+1個數據包 依次處理)
H. QTcpSocket如何發送接收結構體類型數據呢
使用char *參數版本就行。
I. 為什麼我的socket接收大數據的時候接收不完全
TCP協議通信,接收方接收數據的前後次序與發送方一致,但數據包不一定一致。打個比方,發送方按順序發送了2個數據包,接收可能僅接收1次就能全部收到,也可能需要收2次才能收到,也可能收3次,每次收到的數據大小不一定和發送方發送的數據包大小一樣,但最終收到的總數據是一致的。
從你的程序來看,客戶端連續發送2包數據,伺服器端有可能一次就全部接到,也可能分2次收到,也可能會收2次以上才能收到。如果在發送「########helloworld」和「######whatisit」之間增加一些延時語句,比如延時1秒,那麼可以肯定伺服器端只能收到1次,因為在發送第1包數據的時候,伺服器端就接收到一次數據,而在發送第2包數據時,伺服器已經不再有接收動作了。
就現在的客戶端程序來說,如果要在伺服器端收到所有數據,可以考慮在伺服器端循環接收數據,拼裝數據,直到收不到數據為止,然後輸出所有接收到的數據。
while(1)
{
int rr;
sock_fd = accept( sock, NULL, NULL);
retval = 0;
while(1)
{
rr = recv( sock_fd, buf1, MAX_BUFLEN, 0 );
if(rr==0) break;
memcpy(buf+retval,buf1,rr);
retval+=rr;
}
printf("buf= %s\n ##retval=%d\n",buf,retval);
write(sock_fd,"get the call\n",sizeof("get the call\n")-1);
}
可以試試看。僅供參考。
查到個函數ioctlsocket
while(1)
{ int rr;
sock_fd = accept( sock, NULL, NULL);
retval = 0;
int iMode = 1; //0:阻塞
ioctlsocket(sock_fd,FIONBIO, (u_long FAR*) &iMode);//非阻塞設置
while(1) { ....... }
........
}