Ⅰ 電腦接收數據包
1 壓縮完了再用qq 傳過來
2 存到網路網盤裡面 再提取出來
Ⅱ 網卡如何接收與發送數據包
linux網卡驅動程序,將IP包添加14位元組的MAC包頭,構成MAC包。
MAC包中含有發送端和接收端的MAC地址信息。既然是驅動程序創建的MAC包頭信息,當然可以隨便輸入地址信息的。主機偽裝就是這么實現的。
驅動程序將MAC包拷貝到網卡晶元內部的緩沖區,就算完事了。有網卡晶元接手處理。
網卡晶元對MAC包,再次封裝成物理幀,添加頭部同步信息和CRC校驗。然後丟到網線上,就完成一個IP報文的發送。所有掛接到本網線的網卡都可以看到該物理幀。
Ⅲ 電腦網路收不到數據包,怎麼辦
1、IP地址設置不對
分析:使用路由上網的電腦有時候需要手動設置一下電腦的IP地址,如果設置不對就會有問題。比如,如果網關是:192.168.1.1,那麼你的電腦IP地址應該是:192.168.1.2-192.168.1.255。
解決:根據網關重新設置一下電腦的IP,或者簡單一點,在路由中啟用DHCP服務,讓路由給你的電腦自動分析IP地址。
2、水晶頭和網卡接觸不好
分析:這種情況一般出現在比較老的電腦上,由於長時間的使用,水晶頭和者網卡接觸的地方可能會被氧化,造成8根網線中的某幾根接觸不好,雖然顯示的已經連接,但是收不到數據包
解決:重做水晶頭,或者更換網卡,把可以把網卡用酒精清洗一下。
3、電腦中了病毒
分析:對於上網的電腦,如果感染了ARP病毒或者其它病毒,可能會造成電腦上不了網或者收不到數據包的問題。
解決方法:安裝殺毒軟體進行殺毒,如果還是不行,建議重裝操作系統。
4、主板和網卡不兼容,或者是網卡和路由的速率不兼容。
分析:這種情況一般比較少,可能會出現的是新的網卡裝在比較舊的主板上的時候(我這次遇到的就是這個問題),由於一般情況下網卡都是即裝即用,很少需要去設置的,所以很少有人會想到是這個問題。
解決方法:
1、在桌面上找到我的電腦,點右鍵,選擇管理-->設備管理-->網路適配器
2、找到要設置的網卡,點右鍵,選擇-->屬性-->高級,找到Connection Type,這一項的默認值是:Auto-Negotiation,意思是自動調節,如圖所示:在這里修改一下,和主板或者是路由相匹配即可。總之,對於網卡收不到數據包這種問題,出現的原因其實是有很多的,遇到這種情況的時候我們需要一步一步的去測試、排除,如果有相應的工具比如:測線儀,會方便很多。
Ⅳ 數據包接收問題 急求正解
完全正常.
Ⅳ windows如何發送與接收數據包
網路上發送接收數據包主要都是TCP/IP協議構成,太復雜了,主要是三次握手,確認後發送接收
Ⅵ 關於接收到數據包
因為沒人給你發送數據,所以你接受的數據包為0
Ⅶ tcp接受數據包,如何解析成一個個完整的數據包。 求java代碼。思路在下面寫了。
思路挺好的,不過我沒代碼。建議搜索下網上的開源項目,大部分都可以找到對應的。沒必要都自己寫。在高級的工程師都不能保證自己寫的沒bug。特別前期。bug超多。不如學習別人修改了上萬次後的結果來的快。
Ⅷ 串口中怎樣接收一個完整數據包的解析
這里以串口作為傳輸媒介,介紹下怎樣來發送接收一個完整的數據包。過程涉及到封包與解包。設計一個良好的包傳輸機制很有利於數據傳輸的穩定性以及正確性。串口只是一種傳輸媒介,這種包機制同時也可以用於SPI,I2C的匯流排下的數據傳輸。在單片機通信系統(多機通信以及PC與單片機通信)中,是很常見的問題。
一、根據幀頭幀尾或者幀長檢測一個數據幀
1、幀頭+數據+校驗+幀尾
這是一個典型的方案,但是對幀頭與幀尾在設計的時候都要注意,也就是說幀頭、幀尾不能在所傳輸的數據域中出現,一旦出現可能就被誤判。如果用中斷來接收的話,程序基本可以這么實現:
unsigned char recstatu;//表示是否處於一個正在接收數據包的狀態
unsigned char ccnt; //計數
unsigned char packerflag;//是否接收到一個完整的數據包標志
unsigned char rxbuf[100];//接收數據的緩沖區
void UartHandler()
{
unsigned char tmpch;
tmpch = UARTRBR;
if(tmpch 是包頭) //檢測是否是包頭
{
recstatu = 1;
ccnt = 0 ;
packerflag = 0;
return ;
}
if(tmpch是包尾) //檢測是否是包尾
{
recstatu = 0;
packerflag = 1; //用於告知系統已經接收到一個完整的數據包
return ;
}
if(recstatu ==1) //是否處於接收數據包狀態
{
rxbuf[ccnt++] = tmpch;
}
}
上面也就是接收一個數據包,但是再次提醒,包頭和包尾不能在數據域中出現,一旦出現將會出現誤判。另外一個。數據的校驗演算法是很必要的,在數據傳輸中,由於受到干擾,很難免有時出現數據錯誤,加上校驗碼可在發現數據傳輸錯誤時,可以要求數據的另一方重新發送,或是進行簡單的丟棄處理。校驗演算法不一定要很復雜,普通的加和,異或,以及循環冗餘都是可以的。我上面的接收程序在接收數據時,已經將包頭和包尾去掉,這些可以根據自己的需求加上,關鍵是要理解原理。
上述包協議出現了以下的幾種變種:
1.1 幀頭+數據長度+數據+校驗值
1.2包長+校驗值
上面兩種其實都是知道了數據包的長度,然後根據接收位元組的長度來判斷一個完整的數據包。例如,定義一個數據包的長度為256位元組,那我們就可以一直接收,直到接收到256個位元組,就認為是一個數據包。但是,會不會存在問題呢?比如說從機向主機發送數據,發送了一半,掉電,重啟,開機後繼續發送,這很明顯接收到的數據就不對了,所以此時很有必要定義一個超限時間,比如我們可以維護下面這樣的一個結構體。
struct uartrd{
char rd[ 256];
unsigned int timeout;
}
成員變數rd用來存放接收到的數據位元組;成員變數timeout用來維護超時值,這里主要討論這個。這個數值怎麼維護呢,可以用一個定時器來維護,以可以放在普通的滴答中斷裡面來維護,也可以根據系統運行一條指令的周期,在自己的循環中來維護,給其設置個初值,比如說100,當有第一個數據到來以後,timeout在指定的時間就會減少1,減少到0時,就認為超時,不論是否接收到足夠的數據,都應該拋棄。
二、根據接收超時來判斷一個數據包
2.1 數據+校驗
核心思想是如果在達到一定的時間沒有接受到數據,就認為數據包接收完成。modbus協議里就有通過時間間隔來判斷幀結束的。具體實現是要使用一個定時器,在接收到第一個數據時候,開啟定時器,在接收到一個數據時候,就將定時器清零,讓定時器重新開始計時,如果設定的超時時間到(超時時間長度可以設置為5個正常接收的周期),則認為在這一段時間內沒有接受到新的數據,就認為接收到一個完整的數據包了。流程大體如下圖所示:
進行一個簡單的小的總結,上述幾種方法都還是較為常用的,在具體的實現上,可以根據具體的實際情況,設計出具體的通訊協議。數據校驗位,有時候感覺不出來其重要性,但是一定要加上,對數據進行一個相關的驗證還是必要的。現在很在MCU都帶有FIFO,DMA等功能,所以有時候利用上這些特性,可以設計出更好的通訊方式。有的人問在接受串口數據時候是應該中斷一次接收一個,還是進入中斷後接收一段數據呢,我認為應該中斷接收一個,因為CPU是很快的,至少對於串口是這樣,在接受每個數據的間隔期間,處理器還是可以做些其他工作的。這是在裸機下的模型。在多線程中,那就可以直接建立一個數據接收線程。
Ⅸ 如何直接讀取網卡接收到的數據包的問題
這個如果你是客戶端,httpclient調用交給你的就是完整的數據。如果是wireshark,好像其本身有一些工具可以直接按照協議把數據聚集起來保存的。
由於顯示的時候有些字元無法直接顯示,所以就用著這種格式顯示了,\XXX代表一個直接,是8進製表示。其他的是解碼好的。
你也可以用winpcap的開發包去讀取並處理這些數據。一切看你要怎麼處理這個數據了。
Ⅹ 以及串口中怎樣接收一個完整數據包的解
1、幀頭+數據+校驗+幀尾
這是一個典型的方案,但是對幀頭與幀尾在設計的時候都要注意,也就是說幀頭、幀尾不能在所傳輸的數據域中出現,一旦出現可能就被誤判。如果用中斷來接收的話,程序基本可以這么實現:
unsigned char recstatu;//表示是否處於一個正在接收數據包的狀態
unsigned char ccnt; //計數
unsigned char packerflag;//是否接收到一個完整的數據包標志
unsigned char rxbuf[100];//接收數據的緩沖區