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)
{
//连接远程的服务器
{//如果连接失败,则该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!");
}
}
服务器端程序,以后再加。