Part Number:CC3200SDKOther Parts Discussed in Thread:CC3200
cc3200作为创建多个套接字,连接多个服务器时,有异常
Yolande Wang:
您好,
CC3200可以同时支持 8 sockets,这意味着可以同时创建和连接最多 8 个 TCP 客户端。
常见的方法是 TCP 客户端使用单独的线程。其他选项可以是使用 sl_Select() API 的单线程。
您的异常情况具体指的是什么?
,
su feng feng su:
感谢您的回复,下面是我建立两个TCP的连接,报错都ASSERT_ON_ERROR(CONNECT_ERROR);
/*tcp0*/
//filling the TCP server socket address
sAddr[0].sin_family = SL_AF_INET;
sAddr[0].sin_port = sl_Htons((unsigned short)usPort);
sAddr[0].sin_addr.s_addr = sl_Htonl((unsigned int)g_ulDestinationIp);iAddrSize[0] = sizeof(SlSockAddrIn_t);
// creating a TCP socket
iSockID[0] = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0);
if( iSockID[0] < 0 )
{
ASSERT_ON_ERROR(SOCKET_CREATE_ERROR);
}
// connecting to TCP server
iStatus[0] = sl_Connect(iSockID[0], ( SlSockAddr_t *)&sAddr[0], iAddrSize[0]);
if( iStatus[0] < 0 )
{
// error
sl_Close(iSockID[0]);
ASSERT_ON_ERROR(CONNECT_ERROR);
}
/*tcp1*/
//filling the TCP server socket address
sAddr[1].sin_family = SL_AF_INET;
sAddr[1].sin_port = sl_Htons((unsigned short)usPort);
sAddr[1].sin_addr.s_addr = sl_Htonl((unsigned int)IP_ADDR2);iAddrSize[1] = sizeof(SlSockAddrIn_t);
// creating a TCP socket
iSockID[1] = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0);
if( iSockID[1] < 0 )
{
ASSERT_ON_ERROR(SOCKET_CREATE_ERROR);
}
// connecting to TCP server
iStatus[1] = sl_Connect(iSockID[1], ( SlSockAddr_t *)&sAddr[1], iAddrSize[1]);
if( iStatus[1] < 0 )
{
// error
sl_Close(iSockID[1]);
ASSERT_ON_ERROR(CONNECT_ERROR);
}
,
su feng feng su:
也就是在单线程情况下,一般使用sl_Select() API 建立多个TCP客户端吧,我在serial_wifi.c中找到了参考代码,感谢您的指点
,
su feng feng su:
有sl_Select建立多个tcp客户端的参考用例吗?
,
Yolande Wang:
su feng feng su 说:有sl_Select建立多个tcp客户端的参考用例吗?
CC3200 设备支持类似 BSD 的套接字。在互联网(以及 e2e 论坛)上,您可以找到许多如何为多个同时连接的客户端创建 TCP 服务器的示例。
参考一下这个链接:https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_WIFI_2419780
,
Yolande Wang:
su feng feng su 说:下面是我建立两个TCP的连接,报错都ASSERT_ON_ERROR(CONNECT_ERROR);
根据您提供的代码,出现的原因和建议有:
1.TCP 服务器未响应、网络问题或连接参数设置不正确导致。
2.宏 ASSERT_ON_ERROR 的触发条件不仅仅是连接错误,您可以了解一下具体的触发条件
3.连接错误时,打印出具体的错误码或错误信息