|
下载了一个0.3.1的源码~然后把LWIP的例程加上了PDF里SOCKET TCP的CLIENT例子在STM32F103VE上跑~
//======================================================================================
建立连接后,创建两个线程,一个负责收,一个负责发,只发送的时候没问题,只接收的时候也没问题……
//======================================================================================
如果STM32一直不停的发,同时PC再给STM32发数据……线程就死掉了……请问大侠们这个应该从哪里开始去调?是发送和接收冲突了?对网络这块知识欠缺……有点无头绪……
//======================================================================================
附上我改写的APP部分
//======================================================================================
直接从KEIL里粘代码到帖子里……缩进全乱了……重新调整了一下,看着舒服多了……
//======================================================================================
const char host[]= "192.168.1.100";//连接的主机
const char send_data[512];//用于发送的数据
char *recv_data;//接收缓冲
int sock, bytes_received;//SOCK和接收到的数据量
static void rt_thread_entry_tx(void* parameter)
{
while(1)
{
send(sock,send_data,512, 0);
rt_thread_delay(1);
}
}
static void rt_thread_entry_rx(void* parameter)
{
while(1)
{
bytes_received = recv(sock, recv_data, 1024, 0);
recv_data[bytes_received] = '\0';
rt_thread_delay(1);
}
}
//
void tcpclient(const char* url, int port)
{
struct hostent *host;
struct sockaddr_in server_addr;
/* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */
host = gethostbyname(url);
/* 分配用于存放接收数据的缓冲*/
recv_data = rt_malloc(1024);
if (recv_data == RT_NULL)
{
rt_kprintf("No memory\n");
return;
}
/* 创建一个socket,类型是SOCKET STREAM,TCP类型*/
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
/* 创建socket失败*/
rt_kprintf("Socket error\n");
/* 释放接收缓冲*/
rt_free(recv_data);
return;
}
/* 初始化预连接的服务端地址*/
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
/* 连接到服务端*/
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
{
/* 连接失败*/
rt_kprintf("Connect error\n");
return;
}
return;
}
void rt_init_thread_entry(void* parameter)
{
//==============================================
rt_thread_t tx,rx;
//==============================================
/* LwIP Initialization */
#ifdef RT_USING_LWIP
{
extern void lwip_sys_init(void);
/* register ethernetif device */
eth_system_device_init();
#ifdef STM32F10X_CL
rt_hw_stm32_eth_init();
#else
/* STM32F103 */
#if STM32_ETH_IF == 0
rt_hw_enc28j60_init();
#elif STM32_ETH_IF == 1
rt_hw_dm9000_init();
#endif
#endif
/* re-init device driver */
rt_device_init_all();
/* init lwip system */
lwip_sys_init();
rt_kprintf("TCP/IP initialized!\n");
}
#endif
//==============================================
tcpclient(host,7000);
//==============================================
tx = rt_thread_create("tx",
rt_thread_entry_tx, RT_NULL,
2048, 20, 50);
if (tx != RT_NULL) rt_thread_startup(tx);
rx = rt_thread_create("rx",
rt_thread_entry_rx, RT_NULL,
2048, 18, 50);
if (rx != RT_NULL) rt_thread_startup(rx);
//==============================================
while(1)
{
rt_thread_delay(RT_TICK_PER_SECOND);
}
} |
|