CH395 UDP服務器發(fā)送數據時,有時會重發(fā)?

如題,不論是用DEBUG395.exe工具測試還是直接代碼控制都出現這種情況,請教如何解決?


同時開啟了TCP服務器及UDP服務器兩個SOCKET,啟用了DHCP,中斷處理流程如下:


/**********************************************************************************

* Function Name ?: CH395SocketInterrupt

* Description ? ?: CH395 socket 中斷,在全局中斷中被調用

* Input ? ? ? ? ?: sockindex

* Output ? ? ? ? : None

* Return ? ? ? ? : None

**********************************************************************************/

void CH395SocketInterrupt(UINT8 sockindex)

{

? ?UINT8 ?sock_int_socket;

? ?UINT16 len;

? ?UINT16 tmp;

? ?UINT8 ?buf[10];


? ?sock_int_socket = CH395GetSocketInt(sockindex); ? ? ? ? ? ? ? ? ? /* 獲取socket 的中斷狀態(tài) */

? ?

? ?if(sock_int_socket & SINT_STAT_SENBUF_FREE) ? ? ? ? ? ? ? ? ? ? ? /* 發(fā)送緩沖區(qū)空閑,可以繼續(xù)寫入要發(fā)送的數據 */

? ?{

? SockInf[sockindex].RemLen = 0;

? ?}


? ?if(sock_int_socket & SINT_STAT_SEND_OK) ? ? ? ? ? ? ? ? ? ? ? ? ? /* 發(fā)送完成中斷 */

? ?{

? ?SockInf[sockindex].RemLen = 0;

? ?}


? ?if(sock_int_socket & SINT_STAT_RECV) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/* 接收中斷 */

? ?{

? ? ? ?len = CH395GetRecvLength(sockindex); ? ? ? ? ? ? ? ? ? ? ? ? ?/* 獲取當前緩沖區(qū)內數據長度 */

? ? ? ?if(len == 0)return;

? ? ? ?if(SockInf[sockindex].RemLen != 0)return; /*有數據為發(fā)送完成*/

? if(len > 512)len = 512;?

??

? SockInf[sockindex].RemLen = ?len; ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 讀取數據 */

? ? ? ?CH395GetRecvData(sockindex,len,CH395Buffer); ? ? ? ? ? ? ? ? ?

? ? ? ?

? if(sockindex == UDP_SERVER_SOCKET)

? {

? ? ? ?CH395UDPSendTo(&CH395Buffer[8], (len -8),&CH395Buffer[4], ((UINT16)CH395Buffer[3] << 8) + CH395Buffer[2], sockindex);

? }

??

? if(sockindex == TCP_SERVER_SOCKET)

? {

? CH395SendData(sockindex,CH395Buffer,len);

? }

? ?}


? ?if(sock_int_socket & SINT_STAT_CONNECT) ? ? ? ? ? ? ? ? ? ? ? ? ? /* 連接中斷,僅在TCP模式下有效*/

? ?{


? ?}


? ?if(sock_int_socket & SINT_STAT_DISCONNECT) ? ? ? ? ? ? ? ? ? ? ? ?/* 斷開中斷,僅在TCP模式下有效 */

? ?{

? ?}


? ?if(sock_int_socket & SINT_STAT_TIM_OUT) ? ? ? ? ? ? ? ? ? ? ? ? ? /* 超時中斷,僅在TCP模式下有效 */

? ?{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*TCP 客戶端模式的時候,假如TCP CLIENT無法順利連接服務器端會進入此中斷*/

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*此時可以把Socket源端口號進行自加處理,以新的端口去連接服務器*/?

? ?}

}



使用UDP@TCP測試工具測試數據收發(fā),如下圖,正常的話收發(fā)數據長度應該是一致的。

blob.png

UDP測試時,會重發(fā)。TCP則不會出現這種狀況。

blob.png

您好,重發(fā)的現象具體描述一下.


您好,

UDP數據長度是實際長度的2倍,檢查一下。檢查

1、UDP的目的端口和本地端口是否一致?一致的話會出現描述情況。

2、檢查所有發(fā)送函數,是否發(fā)送了兩次?


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频