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!");
}
}
服務器端程序,以後再加。