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!");
}
}
服务器端程序,以后再加。
{
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!");
}
}
服务器端程序,以后再加。
相关文章推荐
- Linux C函数参考手册(PDF版)
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- 学习C和C++的9点经验总结
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析
- C字符串操作函数实现方法小结
- C语言中static的作用及C语言中使用静态函数有何好处
- 字典树的基本知识及使用C语言的相关实现
- 详解C语言中free()函数与getpagesize()函数的使用
- C/C++ 宏详细解析