|

楼主 |
发表于 2021-7-23 17:46:00
|
显示全部楼层
void TCPnetTest(void)
{
int32_t iCount;
uint8_t *sendbuf;
static uint8_t tcp_status;
uint16_t maxlen;
int i,index;
uint8_t j;
OS_ERR err;
CPU_TS ts;
OS_FLAGS xResult;
const uint16_t usMaxBlockTime = 10; /* 延迟周期 */
static u8 res;
init_ethernet();
init_TcpNet();
dhcp_disable ();
ip_config.IpAdr[0]=net_var.local_ip_addr[0];
ip_config.IpAdr[1]=net_var.local_ip_addr[1];
ip_config.IpAdr[2]=net_var.local_ip_addr[2];
ip_config.IpAdr[3]=net_var.local_ip_addr[3];
ip_config.NetMask[0]=255;
ip_config.NetMask[1]=255;
ip_config.NetMask[2]=255;
ip_config.NetMask[3]=0;
ip_config.DefGW[0]=192;
ip_config.DefGW[1]=168;
ip_config.DefGW[2]=1;
ip_config.DefGW[3]=1;
ip_config.PriDNS[0]=194;
ip_config.PriDNS[1]=25;
ip_config.PriDNS[2]=2;
ip_config.PriDNS[3]=129;
ip_config.SecDNS[0]=194;
ip_config.SecDNS[1]=25;
ip_config.SecDNS[2]=2;
ip_config.SecDNS[3]=130;
mem_copy ((U8 *)&localm[NETIF_ETH], (U8 *)&ip_config, sizeof(ip_config));
/*
创建TCP Socket并连接,客户端连接服务器后,10秒内无数据通信将断开连接。
但是由于这里使能了TCP_TYPE_KEEP_ALIVE,会一直保持连接,不受10秒的时间限制。
*/
socket_tcp = tcp_get_socket (TCP_TYPE_CLIENT | TCP_TYPE_KEEP_ALIVE, 0, 10, tcp_callback);
if(socket_tcp != 0)
{
res=tcp_connect(socket_tcp, net_var.aim_ip_addr, net_var.port_num, net_var.port_num);
}
OSFlagCreate ((OS_FLAG_GRP *)&FLAG_TCPnet,
(CPU_CHAR *)"FLAG TCPnet",
(OS_FLAGS )0,
(OS_ERR *)&err);
while (1)
{
main_TcpNet();
tcp_status = TCP_StatusCheck(); //用于网线插拔的处理
xResult = OSFlagPend ((OS_FLAG_GRP *)&FLAG_TCPnet,
(OS_FLAGS )0x01,
(OS_TICK )usMaxBlockTime,
(OS_OPT )OS_OPT_PEND_FLAG_SET_ANY +OS_OPT_PEND_BLOCKING,
(CPU_TS *)&ts,
(OS_ERR *)&err);
if((err == OS_ERR_NONE)&&(tcp_status == __TRUE))
{
iCount = tcp_SendLen;
do
{
main_TcpNet();
if (tcp_check_send (socket_tcp) == __TRUE)
{
maxlen = tcp_max_dsize (socket_tcp);
iCount -= maxlen;
if(iCount < 0)
{
maxlen = iCount + maxlen;
}
sendbuf = tcp_get_buf(maxlen);
memcpy(sendbuf,tcp_Sendbuf,tcp_SendLen);
tcp_send (socket_tcp, sendbuf, tcp_SendLen);
OSFlagPost ((OS_FLAG_GRP *)&FLAG_TCPnet,
(OS_FLAGS )0x01,
(OS_OPT )OS_OPT_POST_FLAG_CLR,
(OS_ERR *)&err);
}
}while(iCount > 0);
}
OSTimeDly(1, OS_OPT_TIME_DLY, &err);
}
}
/*
*********************************************************************************************************
* 函 数 名: NetSendData
* 功能说明: TCP发送数据并等待发送完毕
* 形 参: cod 数据指针,len 数据长度
* 返 回 值: 无
*********************************************************************************************************
*/
void NetSendData(char *cod,u16 len)
{
OS_ERR err;
CPU_TS ts;
const uint16_t usMaxBlockTime = 5000; /* 延迟周期 */
tcp_Sendbuf = cod;
tcp_SendLen = len;
OSFlagPost ((OS_FLAG_GRP *)&FLAG_TCPnet,
(OS_FLAGS )0x01,
(OS_OPT )OS_OPT_POST_FLAG_SET,
(OS_ERR *)&err);
OSFlagPend ((OS_FLAG_GRP *)&FLAG_TCPnet,
(OS_FLAGS )0x01,
(OS_TICK )usMaxBlockTime,
(OS_OPT )OS_OPT_PEND_FLAG_CLR_ANY + OS_OPT_PEND_BLOCKING,
(CPU_TS *)&ts,
(OS_ERR *)&err);
}
|
|