您的位置:首页 > 理论基础 > 计算机网络

lwip tcp编程

2016-02-03 10:38 483 查看
1.客户端程序

{

  int iTCPClientSock = -1;

    struct sockaddr_in address;

    uint32_t u32InetAddr = 0;

    int iRecvLen = 0;

    OS_ERR eOSErr;

  LWIP_UNUSED_ARG(arg);

  /* Create a new connection identifier. */

  /* 创建TCP Socket */

    if((iTCPClientSock = socket(AF_INET, SOCK_STREAM, 0)) < 0)

    {

      PlatErrorPrint(0, "tcpecho_thread1 socket failed!");

    }

    /* 设置目的IP地址和端口号 */

    address.sin_family = AF_INET;

    address.sin_port = htons(TCP_SERVER_PORT);

    u32InetAddr = inet_addr(TCP_SERVER_IP);

    

    address.sin_addr.s_addr = u32InetAddr;

    memset(&address.sin_zero,0,sizeof(address.sin_zero));

    while(1)
    {

        //连接远程的服务器

        if(connect(iTCPClientSock, (struct sockaddr *)&address, sizeof (address)) < 0) 

        {//如果连接失败,则该socket就不能用了,网上说连接失败后,socket的连接状态不可知,如果连接状态为关闭状态的话,就可以继续connect,否则必须关闭连接,并重新申请socket。

            if((close(iTCPClientSock)) < 0)

            {//关闭socket

              PlatErrorPrint(0, "tcpecho_thread1 close failed!");

            }

            

            if((iTCPClientSock = socket(AF_INET, SOCK_STREAM, 0)) < 0)

            {//申请新的socket

              PlatErrorPrint(0, "tcpecho_thread1 socket failed!");

            }

            PlatErrorPrint(0, "tcpecho_thread1 connect failed,err=%d!");

        }

        else

        {

            break;

        }

        OSTimeDly(1000, OS_OPT_TIME_TIMEOUT, &eOSErr);

    }

    PlatErrorPrint(0, "tcpecho_thread1 connect success!");

    while(1)

    {        

        while(1)

        {

//            iRecvLen = recv(iNewSocket,g_au8Send_1_Data,sizeof(g_au8Send_1_Data),0);

//            if(iRecvLen <= 0)

//            {//接收为0时,是对方主动关闭了socket,《0时接收错误

//              PlatErrorPrint(0, "tcpecho_thread1 recv failed!");

//              break;

//            }

            iRecvLen = send(iTCPClientSock,g_au8Send_1_Data,sizeof(g_au8Send_1_Data),0);

            if(iRecvLen < 0)

            {//发送错误,比如对方关闭了端口,网线掉了......

              PlatErrorPrint(0, "tcpecho_thread1 send failed!");

              break;

            }

            OSTimeDly(5000, OS_OPT_TIME_TIMEOUT, &eOSErr);

        }

                

        if((close(iTCPClientSock)) < 0)

        {

          PlatErrorPrint(0, "tcpecho_thread1 close failed!");

        }

            

        

        if((iTCPClientSock = socket(AF_INET, SOCK_STREAM, 0)) < 0)

        {

          PlatErrorPrint(0, "tcpecho_thread1 socket failed!");

        }

        

        /* 设置目的IP地址和端口号 */

        address.sin_family = AF_INET;

        address.sin_port = htons(TCP_SERVER_PORT);

        u32InetAddr = inet_addr(TCP_SERVER_IP);

        

        address.sin_addr.s_addr = u32InetAddr;

        while(1)

        {

            

            if(connect(iTCPClientSock, (struct sockaddr *)&address, sizeof(address)) < 0)

            {

                

                if((close(iTCPClientSock)) < 0)

                {

                  PlatErrorPrint(0, "tcpecho_thread1 close failed!");

                }

                if((iTCPClientSock = socket(AF_INET, SOCK_STREAM, 0)) < 0)

                {

                  PlatErrorPrint(0, "tcpecho_thread1 socket failed!");

                }

                PlatErrorPrint(0, "tcpecho_thread1 connect failed,err=%d!");

            }

            else

            {

                break;

            }

            OSTimeDly(1000, OS_OPT_TIME_TIMEOUT, &eOSErr);

        }

        PlatErrorPrint(0, "tcpecho_thread1 connect success!");

        

    }

}

服务器端程序,以后再加。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  TCP编程 C