当前位置: 技术问答>linux和unix
嵌入式linux下,TCP的客户端无法连接到服务器(硬件没问题),请帮忙看看!谢谢
来源: 互联网 发布时间:2015-12-07
本文导语: #include #include #include #include #include #include #include #include #include #include #include ...
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// #include
#include
#define FALSE 0
#define TRUE 1
char * host_name="192.168.3.18";
int server_port=8000;
#define MAXDATASIZE 1024
int main(int argc,char ** argv)
{
int socket_fd;
struct sockaddr_in server_addr;
struct hostent * server_host_name;
sleep(5);//delay 5s
for(;;)
{
if((server_host_name=gethostbyname(host_name))==0)
{
printf("ncan not resolving localhost");
}
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_addr.s_addr=((struct in_addr *)(server_host_name->h_addr))->s_addr;
server_addr.sin_port=htons(server_port);
if((socket_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("nnError openning socket");
close(socket_fd);
continue;
}
fcntl(socket_fd,F_SETFD,O_NONBLOCK);
if(connect(socket_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1)
{
printf("nnError connect ...");
close(socket_fd);
continue;
}
else
{
break;
}
}// end init socket
printf("nConnect OK...");
while(1)
{
;
}//end while
return 0;
}//END MAIN
------------------------
代码就是上面的,开发板与PC通过交叉网线连接,内核与文件系统通过TFTP下载到目标板,板子的IP为"192.168.3.200"。
先在PC跑TCP的服务端(IP:192.168.3.18,PORT:8000),局域网内任何机子跑的客户端都能和该服务端通信。板子启动后在超级终端输出的信息始终为“Error connect ...”。
请问怎么解决?谢谢
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// #include
#include
#define FALSE 0
#define TRUE 1
char * host_name="192.168.3.18";
int server_port=8000;
#define MAXDATASIZE 1024
int main(int argc,char ** argv)
{
int socket_fd;
struct sockaddr_in server_addr;
struct hostent * server_host_name;
sleep(5);//delay 5s
for(;;)
{
if((server_host_name=gethostbyname(host_name))==0)
{
printf("ncan not resolving localhost");
}
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_addr.s_addr=((struct in_addr *)(server_host_name->h_addr))->s_addr;
server_addr.sin_port=htons(server_port);
if((socket_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("nnError openning socket");
close(socket_fd);
continue;
}
fcntl(socket_fd,F_SETFD,O_NONBLOCK);
if(connect(socket_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1)
{
printf("nnError connect ...");
close(socket_fd);
continue;
}
else
{
break;
}
}// end init socket
printf("nConnect OK...");
while(1)
{
;
}//end while
return 0;
}//END MAIN
------------------------
代码就是上面的,开发板与PC通过交叉网线连接,内核与文件系统通过TFTP下载到目标板,板子的IP为"192.168.3.200"。
先在PC跑TCP的服务端(IP:192.168.3.18,PORT:8000),局域网内任何机子跑的客户端都能和该服务端通信。板子启动后在超级终端输出的信息始终为“Error connect ...”。
请问怎么解决?谢谢
|
其他linux下的这个程序可以连上?
|
errno打出来不就知道原因了?
|
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_addr.s_addr=((struct in_addr *)(server_host_name->h_addr))->s_addr;
改成
server_addr.sin_addr.s_addr = inet_addr(host_name);
server_addr.sin_addr.s_addr=((struct in_addr *)(server_host_name->h_addr))->s_addr;
改成
server_addr.sin_addr.s_addr = inet_addr(host_name);