4101|11

58

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一个网络编程方面的问题,connect()老是报错,请高手帮忙! [复制链接]

客户端程序每次都提示下面的错误,不知道是什么原因:
-> socket_client
addr: 192.168.10.34
create socket OK!!!!!!!
: OK
connect error: S_errno_EHOSTUNREACH
value = -1 = 0xffffffff

下面是客户端的代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define        port_num        6100

int socket_client()
{
        int sockAddrSize;              /* size of socket address structure */
        int clientsocket;           
        struct sockaddr_in serversocket;/* connector's address information */
        char buf[200];
        int numbytes;
        struct hostent *he;
        char *server = "192.168.10.34";
       
        sockAddrSize = sizeof (struct sockaddr_in);
        bzero ((char *) &serversocket, sockAddrSize);
        serversocket.sin_family = AF_INET; /* host byte order */
        serversocket.sin_port = htons(port_num); /* short, network byte order */
        serversocket.sin_len = (u_char) sockAddrSize;
        serversocket.sin_addr.s_addr = inet_addr(server);
        bzero((char *)&(serversocket.sin_zero),8);

        printf("addr: %s\n",inet_ntoa(serversocket.sin_addr));
       
        if((clientsocket = socket(AF_INET,SOCK_STREAM,0))==ERROR)
        {
                perror("create socket error\n");
                return(ERROR);
        }
        perror("create socket OK!!!!!!!\n");
       
        if((connect(clientsocket,(struct sockaddr*)&serversocket,sockAddrSize))==ERROR)       
        {
                perror("connect error");
                return(ERROR);
        }
        perror("connect OK\n");
       
        if((numbytes = recv(clientsocket, buf,200,0)))
        {
                perror("recv error");
                return(ERROR);
        }
        perror("ALL OK!!!!");
       
        buf[numbytes]='\0';
        printf("Received: %s",buf);
        close(clientsocket);
        return 0;
}


下面是服务器端的代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define        port_num        6100
/*#define Client_IP        "192.168.10.34"*/
int socket_service()
{
        struct sockaddr_in serverAddr; /* server's socket address */
        struct sockaddr_in clientAddr; /* client's socket address */
        int sockAddrSize;              /* size of socket address structure */
        int mysocket;                       /* socket file descriptor */
        int sClientSocket;

        /* set up the local address */
        sockAddrSize = sizeof (struct sockaddr_in);
        bzero ((char *) &serverAddr, sockAddrSize);
        serverAddr.sin_family = AF_INET;
        serverAddr.sin_len = (u_char) sockAddrSize;
        serverAddr.sin_port = htons (port_num);
        serverAddr.sin_addr.s_addr =  htonl (INADDR_ANY);
       
        /*CREATE a  socket*/

        if((mysocket = socket(AF_INET,SOCK_STREAM,0))==ERROR)
        {
                perror("create socket error\n");
                return(ERROR);
        }
        perror("create socket OK!!!!!!!!\n");
       
        /*bind socket to server address*/

        if(bind(mysocket,(struct sockaddr*)&serverAddr,sockAddrSize) == ERROR)
        {
                perror("bind error\n");
                close(mysocket);
                return(ERROR);
        }

        perror("bind OK!!!!!!!!!\n");
       
        /*listen */
        if(listen(mysocket,5) == ERROR)
        {
                perror("ERROR\n");
                return(ERROR);
        }
        perror("LISTEN OK!!!!\n");
       
        /*ACCEPT() wait for new client connection */
        while(1)
        {
                sockAddrSize = sizeof (struct sockaddr_in);
                if((sClientSocket==accept(mysocket,(struct sockaddr *) &clientAddr, &sockAddrSize))==ERROR)
                {
                        perror (" socket accept error\n");
                        continue; /*不执行下面语句直接进行下次循环*/
                }
                printf("server: got connection from %s\n", inet_ntoa(clientAddr.sin_addr));
                if ((send(sClientSocket, "connected!!\n", 14, 0)) == ERROR)
                    perror("send  error");
                close(sClientSocket);                
                break;
        }       
        perror("ALL OK!!!!!\n");
       
        return OK;
}

服务器端运行结果显示如下:

->
-> socket_service
create socket OK!!!!!!!!
: OK
bind OK!!!!!!!!!
: OK
LISTEN OK!!!!
: OK


请各位帮我看看是什么地方出问题了,先谢谢大家。

最新回复

我的是别人从网上下的。  详情 回复 发表于 2009-1-17 22:28
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我仔细察看了代码找不到问题,这是第一次写,可能有些问题没有考虑到,请各位帮我看一下,谢谢!
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你的错误提示主机不可达,检查一下主机能否ping通.
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

4
 
我也遇到了这个问题,
我是使用虚拟机启动vxworks的,想connect http://www.google.com
和本地主机视乎可以连接(虚拟机启动是下载主机上的ftp),但是不能连接外网
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
我连的是我的本机,应该也可以吧,家里的机器没有装workbench,周一回公司再看看。不过这也可能是我的服务器程序有问题,但是找不到问题所在,郁闷啊~~希望高手们多给我分析分析 
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

6
 
我的意思是链接的对端机器不可达,不是你的主机。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
问题已经解决,我使用的是simulation ,而ip地址是我本机的ip 并非模拟器(simulation) 的ip,所以连不上。我竟ip 改为:127.0.0.1 (或者改为simulation的ip。我不知道如何查模拟器的ip ,就使用了这个)就可以了。如果有哪位知道使用什么函数可以查看simulation的Ip 请告诉我一下(我使用的是vxworks 6.6 ,workbench3.0)。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
一个用ifShow可以查自己的ip
另外,其实simulation的ip其实是由你自己来决定的。默认的,假设你host的虚拟网卡的ip是90.0.0.100,那么simulation的ip就是90.0.0.x,这个x = CPU号+1
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
使用ifshow 好象不行,提示:C interp: unknown symbol name 'ifshow'.  不知道是不是vxworks6.6  改变了查看ip 的函数。还有: host的虚拟网卡的ip在哪里查看阿?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
请问楼主你的vxworks 6.6 ,workbench3.0哪里搞的 我也想搞个!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 8 楼 fangf0556 的回复:
使用ifshow 好象不行,提示:C interp: unknown symbol name 'ifshow'.  不知道是不是vxworks6.6  改变了查看ip 的函数。还有: host的虚拟网卡的ip在哪里查看阿?

simulation的ip:用ifShow命令,vxworks大小写敏感的
虚拟网卡ip:直接在运行中输入cmd,在命令行下输入ipconfig/all即可看到所有网卡的ip地址
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
我的是别人从网上下的。
引用 9 楼 jinbinhan 的回复:
请问楼主你的vxworks 6.6 ,workbench3.0哪里搞的 我也想搞个!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表