W5500 學習開發: TCP客戶端


 

 

 

TCP客戶端

 W5500的TCP客戶端百度到處都有,而且都是一個模子

簡而言之:就是這么寫,這么用

 

上菜

/**
* @brief   TCP客戶端
* @param   None
* @retval  None
* @warning None
* @example
**/
void do_tcpc(void)
{
    switch(getSn_SR(SOCK_TCPC))                                                           /*獲取socket的狀態*/
    {
        case SOCK_CLOSED:                                                                     /*socket處於關閉狀態*/
            socket(SOCK_TCPC,Sn_MR_TCP,local_port++,Sn_MR_ND);
          break;
        case SOCK_INIT:                                                                         /*socket處於初始化狀態*/
            connect(SOCK_TCPC,IP,Port);                /*socket連接服務器*/ 
            
          break;
        case SOCK_ESTABLISHED:                                                              /*socket處於連接建立狀態*/
            if(getSn_IR(SOCK_TCPC) & Sn_IR_CON){
                setSn_IR(SOCK_TCPC, Sn_IR_CON);                                      /*清除接收中斷標志位*/
            }
            
            MainLen=getSn_RX_RSR(SOCK_TCPC);                                                /*獲取接收的數據長度*/
            if(MainLen>0){//接收到數據
                recv(SOCK_TCPC,MainBuffer,MainLen);                                           /*接收來自Server的數據*/
                MainBuffer[MainLen]=0x00;                                                         /*添加字符串結束符*/
                printf("\r\n接收到消息:\r\n");
                UsartOutStrIT(USART1,MainBuffer,MainLen);
                
                BufferManageWrite(&send_manage_struct3,MainBuffer,MainLen,&MainLen);//把數據寫入發送緩存
            }
            
          break;
        case SOCK_CLOSE_WAIT:                                                              /*socket處於等待關閉狀態*/
            close(SOCK_TCPC); 
          break;
    }
}

 

采用的socket1作為了TCP客戶端

 

 

 

 

測試准備工作(需要連接路由器)

保證電腦/手機和W5500在同一個局域網內

1.查看自己電腦的IP地址

 

 

 

2.開啟TCP服務器:監聽 8080

 

 

 

3.修改程序中連接的IP地址:根據自己的TCP服務器IP地址修改

 

 

 

4.下載測試

單片機串口1 -- 連接CH340 作為日志輸出口

單片機串口3 -- 連接485

 

 

 

 

485連接如下:

 

 

 

 

測試

1.單片機程序為自動連接TCP服務器,首先保證有客戶端連接

 

 

 

2.服務器發消息給客戶端

 

 

 

 

 

 

 

 

 

 

3.485發送消息給TCP服務器

 

 

 

 

 

 

 

程序說明

1.執行DHCP以后執行TCP客戶端程序

 

 

 

2.接收數據以后,使用串口1打印輸出

把數據存入緩存

 

 

 

 

3.讀取緩存里面的數據,並使用串口3輸出(485)

 

 

 

 

4.如果串口3(485),緩存里面有數據,則轉發給TCP 服務器

 

 

 

 

細節說明

1.從網口接收的數據,為啥要存入緩存

然后再從緩存里面取出來以后再使用串口3發送出去?

答:你想想如何解決下面的問題

1.1.如果服務器突然過來的幾條數據間隔很短,你使用串口3發送的時候你還沒發送完就接着來新的數據了!

1.2.如果服務器過來的數據非常多,你處理數據的時候又可能有延時,你該怎么做?

1.3.有些時候需要每條數據有時間間隔,然后發送給485

1.4.如果你需要發送完一條以后,需要等待485回復呢?

 

 

2.為啥所有的串口都使用了緩存接收數據?

答:最簡單的例子

485接收的數據轉發給TCP

你想想如何解決下面的問題:

2.1 假設數據需要處理一下再發送給TCP,如果處理的時候又來了新數據怎么辦?

2.2 如果TCP服務器故障,但是我還希望最近的一條數據在服務器恢復以后接着發出去?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM