新手上路
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2015-6-23
- 在线时间
- 4 小时
|
10金钱
各位大神好:
小弟在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 memory\n");
return;
}
host = gethostbyname(server_ip_str);
my_ipaddr.s_addr = *(unsigned long *) host->h_addr_list[0];
rt_kprintf("your IP Address:%s\r\n" , 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 = %d\n",sock);
if ( sock == -1 )
{
rt_kprintf("Socket error\n");
rt_free(recv_data);
return;
}
conn = lwip_connect(sock, (struct sockaddr *)&my_sockaddr, sizeof(struct sockaddr));
rt_kprintf("conn = %d\n",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): invalid\n", s));
set_errno(EBADF);
return NULL;
} 直接反馈NULL;
代码中使能了 RT_LWIP_DHCP;
如果代码不使能 RT_LWIP_DHCP,那么是可以连接上服务器的,但是加了 RT_LWIP_DHCP,一直反馈connect fail,不知道为什么
哪位大哥知道的,指点下,到底哪儿出错了,谢谢!
|
|