CH395 tcp服務(wù)器調(diào)試求助

使用的是官方Demo,將SOCKET0設(shè)置為TCP服務(wù)器工作模式,可以正常收發(fā)數(shù)據(jù)。但客戶端主動斷開連接后就無法再次連接上。軟件提示“socket連接失敗 10061”,發(fā)送命令CMD12_GET_SOCKET_STATUS_SN查詢該SOCKET狀態(tài)為05,01。其中CH395SocketInterrupt()處理沒有做任何改動,針對這些異常我應(yīng)該如何處理?


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ā)送的數(shù)據(jù) */

? ?{

? ? ? ?if(SockInf.SendLen >= SockInf.RemLen)SockInf.RemLen = 0; ? ? ?/* 數(shù)據(jù)已經(jīng)發(fā)送完畢 */

? ? ? ?else

? ? ? ?{

? ? ? ? ? ? SockInf.pSend += SockInf.SendLen; ? ? ? ? ? ? ? ? ? ? ? ?/* 對發(fā)送指針進(jìn)行偏移 */

? ? ? ? ? ? SockInf.RemLen -= SockInf.SendLen; ? ? ? ? ? ? ? ? ? ? ? /* 計算剩余長度 */

? ? ? ? ? ? if(SockInf.RemLen > 512)SockInf.SendLen = 512; ? ? ? ? /* 計算本次可以發(fā)送的數(shù)據(jù)長度 */

? ? ? ? ? ? else SockInf.SendLen = SockInf.RemLen; ? ??

? ? ? ? ? ? CH395SendData(sockindex,SockInf.pSend,SockInf.SendLen); /* 發(fā)送數(shù)據(jù) */

? ? ? ?}

? ?}


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

? ?{


? ?}


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

? ?{

? ? ? ?len = CH395GetRecvLength(sockindex); ? ? ? ? ? ? ? ? ? ? ? ? ?/* 獲取當(dāng)前緩沖區(qū)內(nèi)數(shù)據(jù)長度 */

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

? ? ? ?if(SockInf.RemLen != 0)return; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/* 如果數(shù)據(jù)未發(fā)送完畢,則不再接收 */

? ? ? ?CH395GetRecvData(sockindex,len,CH395Buffer); ? ? ? ? ? ? ? ? ? ? /* 讀取數(shù)據(jù) */

? ? ? ?SockInf.RemLen = len; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 保存長度 */

? ? ? ?if(len > 512)len = 512; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 發(fā)送緩沖區(qū)最大為2048 */

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

? ? ? ?SockInf.SendLen = len; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/* 保存發(fā)送的長度 */

? ? ? ?SockInf.pSend = CH395Buffer; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 發(fā)送換取區(qū)指針 */

? ?}


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

? ?{

? ? ? ?if(SockInf.TcpMode == TCP_SERVER_MODE) ? ? ? ? ? ? ? ? ? ? ? /* 如果socket 為服務(wù)器模式,用戶可以獲取遠(yuǎn)端的IP和端口*/

? ? ? ?{

? ? ?//CH395CMDGetRemoteIPP(sockindex,buf);

? ? ? ?}

? ?}


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

? ?{

? ?

? ?}


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

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

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

? ?}

}



您好,請確認(rèn)芯片版本號是多少?如果是0x42版本,TCP連接斷開后,socket0關(guān)閉,在DISConnect或者Timeout中斷中重新打開。

假如是0x44版本,建議從我們網(wǎng)站下載“CH395EVT”包。參考下TCP SERVER的例程。

請將創(chuàng)建Socket代碼發(fā)上來看看。


您好,請確認(rèn)芯片版本號是多少?如果是0x42版本,TCP連接斷開后,socket0關(guān)閉,在DISConnect或者Timeout中斷中重新打開。

假如是0x44版本,建議從我們網(wǎng)站下載“CH395EVT”包。參考下TCP SERVER的例程。

請將創(chuàng)建Socket代碼發(fā)上來看看。



??? 您好,請確認(rèn)芯片版本號是多少?如果是0x42版本,TCP連接斷開后,socket0關(guān)閉,在DISConnect或者Timeout中斷中重新打開。

假如是0x44版本,建議從我們網(wǎng)站下載“CH395EVT”包。參考下TCP SERVER的例程。

請將創(chuàng)建Socket代碼發(fā)上來看看。



? ? ? ? ? ? ? ? ? ? ? ? ? ?

??? 您好,請確認(rèn)芯片版本號是多少?如果是0x42版本,TCP連接斷開后,socket0關(guān)閉,在DISConnect或者Timeout中斷中重新打開。

假如是0x44版本,建議從我們網(wǎng)站下載“CH395EVT”包。參考下TCP SERVER的例程。

請將創(chuàng)建Socket代碼發(fā)上來看看。


? ? ? ? ? ? ? ? ? ? ? ?

這個問題已經(jīng)解決,當(dāng)時讀SOCKET狀態(tài)時,傳錯了參數(shù)。芯片版本是0x44的,TCP客戶端斷開連接時,SOCKET的狀態(tài)時關(guān)閉的,重新打開并監(jiān)聽就OK了。建議官方Demo做的還是規(guī)范一些,一些異常處理還是需要的。


您好,0x44版本可直接使用TCP SERVER多連接功能,異常處理我們會考慮添加。


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

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