免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1727 | 回复: 3
打印 上一主题 下一主题

socket 编程求助(已经解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-05 22:51 |只看该作者 |倒序浏览
在客户机上不能得到远程服务器的返回信息,求大虾帮忙!!!谢 谢 谢
以下是客户机代码:
………………
#define PORTNUM        80
int    errno;

int main(void)
{
        int                                                                 socketId;
        struct sockaddr_in                         serverAdd;
        struct hostent                                        *host;
        char *                                                        url                                        =                "www.sohu.com";
        char *                                                   msg                                        =            "GET /index.html HTTP/1.0 Accept: */* connection: keep-live";
        char                                                                 get[10000]                ;
        int                        i=0;

        
        socketId = socket(AF_INET,SOCK_STREAM,0);

        printf("socketId=%d",socketId);
        if (socketId != -1) {
                printf("\nSocket OK\n");
        } else {
                printf("Socket Fails\n");
        }
        bzero(&serverAdd,sizeof(serverAdd));
        host = gethostbyname(url);
           bcopy(host->h_addr,(struct sockaddr *)&serverAdd.sin_addr,host->h_length);

   serverAdd.sin_port=htons(PORTNUM);
   serverAdd.sin_family=AF_INET;
        serverAdd.sin_addr.s_addr=htonl(INADDR_ANY);
        serverAdd.sin_addr.s_addr=((struct in_addr *)(host->h_addr))->s_addr;
        if( (connect(socketId,(struct sockaddr *)&serverAdd,sizeof(serverAdd))) == 0){
        fprintf(stderr,"connect error:%s",strerror(errno));
                printf("\nConnect ok\n");
        }

        int getLen;
        int sendLen;

        printf("%s\n",msg);
        printf("%d\n",strlen(msg));
        printf("socketId=%d\n",socketId);
        
         sendLen = send(socketId,msg,strlen(msg),0);
        
         printf("Send %d B   ok...\n",sendLen);
        printf("%d\n",sizeof(get));
        getLen = recv(socketId,get,sizeof(get),0);

        printf("Get %d B\n",getLen);
        printf("%s\n",get);
        close(socketId);
}
运行结果:
   
socketId=3
Socket OK
connect error:Success
Connect ok
GET /index.html HTTP/1.0 Accept: */* connection: keep-live
58
socketId=3
Send 58 B   ok...
10000
Get 0 B
网络的连接也正常(如可以在浏览器中访问
www.sohu.com),而且如果两机在同网中,就可以收到服务器端信息;
但是在我们的同网中不能访问同台机器的WEB服务器,但是浏览器可以访问。
求教  急!!!


[ 本帖最后由 jovistar 于 2007-9-6 23:01 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-09-06 11:00 |只看该作者
这两行serverAdd.sin_addr.s_addr=htonl(INADDR_ANY);
serverAdd.sin_addr.s_addr=((struct in_addr *)(host->h_addr))->s_addr;
去掉第1行,你又不发给本端

论坛徽章:
0
3 [报告]
发表于 2007-09-06 13:43 |只看该作者
呵呵,多看看书,鼓励一下

论坛徽章:
0
4 [报告]
发表于 2007-09-06 23:01 |只看该作者
汗一下,原来是HTTP请求错误的,需要加上\r\n\r\n
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP