完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大神好:
小弟在RT-thread 下创建一个简单的tcp客户端程序,用的是RTT自带的STM32F107程序,网络芯片是DP83848; 代码如下: void rt_tcp_client_thread_entry(void* parameter) { ALIGN(4) static const char send_data[] = "this is tcp client from rt-thread."; char *recv_data; int sock; const char server_ip_str[16]="192.168.0.101"; uint16_t port = 8080; struct hostent *host; struct in_addr my_ipaddr; struct sockaddr_in my_sockaddr; int conn; recv_data = rt_malloc(1024); if(recv_data == RT_NULL) { rt_kprintf("no memoryn"); return; } host = gethostbyname(server_ip_str); my_ipaddr.s_addr = *(unsigned long *) host->h_addr_list[0]; rt_kprintf("your IP Address:%srn" , inet_ntoa(my_ipaddr)); my_sockaddr.sin_family = AF_INET; my_sockaddr.sin_port = htons(port); my_sockaddr.sin_addr = my_ipaddr; rt_memset(&(my_sockaddr.sin_zero), 0, sizeof(my_sockaddr.sin_zero)); sock = socket(AF_INET, SOCK_STREAM, 0); rt_kprintf("sock = %dn",sock); if ( sock == -1 ) { rt_kprintf("Socket errorn"); rt_free(recv_data); return; } conn = lwip_connect(sock, (struct sockaddr *)&my_sockaddr, sizeof(struct sockaddr)); rt_kprintf("conn = %dn",conn); if ( conn == -1) { rt_kprintf("Connect fail!n"); lwip_close(sock); rt_free(recv_data); return; } while(1) { send(sock,send_data,strlen(send_data), 0); // closesocket(sock); rt_thread_delay( 500); } } lwip_connect 这个一直返回的是-1,打断点调试sock = 0; 调试进 lwip_connect 进去, int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen) { struct lwip_sock *sock; err_t err; const struct sockaddr_in *name_in; sock = get_socket(s); if (!sock) { return -1; 。。。。 } 一直返回-1,死在get_socket这个了,这个S传进去是0,但是里面 static struct lwip_sock * get_socket(int s) { struct lwip_sock *sock; if ((s < 0) || (s >= NUM_SOCKETS)) { LWIP_DEBUGF(SOCKETS_DEBUG, ("get_socket(%d): invalidn", s)); set_errno(EBADF); return NULL; } 直接反馈NULL; 代码中使能了 RT_LWIP_DHCP; 如果代码不使能 RT_LWIP_DHCP,那么是可以连接上服务器的,但是加了 RT_LWIP_DHCP,一直反馈connect fail,不知道为什么 哪位大哥知道的,指点下,到底哪儿出错了,谢谢! |
|
相关推荐
6个回答
|
|
软件跑起来后,分配的地址103,我在电脑上ping 192.168.0.103 是可以ping通的,也就是地址是分配了,但是connect..出问题
|
|
|
|
|
|
|
|
到connect那进去,sock传进去等于0,然后进入connect函数int
lwip_connect(int s, const struct sockaddr *name, socklen_t namelen) { struct lwip_sock *sock; err_t err; const struct sockaddr_in *name_in; rt_kprintf("s = %dn",s); //test sock = get_socket(s); 0进去,返回的NULL,我看了下,并不满足条件,不知道什么原因; if (!sock) { return -1; 。。。 } static struct lwip_sock * get_socket(int s) { struct lwip_sock *sock; if ((s < 0) || (s >= NUM_SOCKETS)) { S= 0,NUM_SOCKETS =4 ,怎么会进去????? LWIP_DEBUGF(SOCKETS_DEBUG, ("get_socket(%d): invalidn", s)); set_errno(EBADF); return NULL; } |
|
|
|
用wireshark 抓106发过来的包,一包也没有
|
|
|
|
我也遇到同样的问题,楼主解决了吗?解决了可以分享一下吗?
|
|
|
|
您解决了吗
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2551 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2336 浏览 5 评论
3167 浏览 3 评论
2809 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2769 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
622浏览 1评论
863浏览 0评论
981浏览 0评论
633浏览 0评论
458浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 03:27 , Processed in 1.142181 second(s), Total 58, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号