| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1642 人关注过本帖
标题:winsocket http协议请求,为什么recv接收的数据没有按照顺序接收,而且在最 ...
只看楼主 加入收藏
towaywu
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-11-3
收藏
 问题点数:0 回复次数:6 
winsocket http协议请求,为什么recv接收的数据没有按照顺序接收,而且在最后还要停顿一段时间才会断开
程序代码:
#include <stdio.h>
#include "winsock2.h"
//#pragma comment(lib, "ws2_32.lib") //2.0版本
int main() {
    // Initialize Winsock.
    WSADATA wsaData;
    int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
    if ( iResult != NO_ERROR ){
        printf("Error at WSAStartup()\n");
    }
   

    // Create a socket.
    SOCKET m_socket;
    m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    if ( m_socket == INVALID_SOCKET ) {
        printf( "Error at socket(): %ld\n", WSAGetLastError() );
        WSACleanup();
        return 1;
    }
    // Connect to a server.
    struct sockaddr_in clientService;
    clientService.sin_family = AF_INET;
    clientService.sin_addr.s_addr = inet_addr("113.106.90.157");
    clientService.sin_port = htons( 80 );
    if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(SOCKADDR)) == SOCKET_ERROR){
        printf( "Failed to connect.\n" );
        WSACleanup();
        return;
    }

    // Send and receive data.
    int bytesSent;
   

    char sendbuf[1024];
    sprintf(sendbuf,"%s","GET / HTTP/1.1\r\n");
    strcat(sendbuf,"Host: www.\r\n");
    strcat(sendbuf,"Content-Encoding: utf-8\r\n");
    strcat(sendbuf,"User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0\r\n\r\n");
   

    int bytesRecv = strlen(sendbuf);
    char recvbuf[1024];
    char *precvbuf = recvbuf;
    bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
    printf( "Bytes Sent: %ld\n", bytesSent );   

   

//    bytesRecv = recv( m_socket, recvbuf, 2 , 0 );
//    printf("\n %d\n",bytesRecv);
   

   

    while( 1 ) {
        bytesRecv = recv(m_socket, recvbuf,1024 , 0);
        printf("%s",recvbuf);
    

       // printf("\n%d\n",bytesRecv);
        if(bytesRecv<=0){
            break;
        }    

      

    }   


    



    close(m_socket);
    return 0;
} 



[local]1[/local][local]2[/local]


QQ截图20131103221619.jpg (77.25 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册


QQ截图20131103221901.jpg (37.68 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 而且 
2013-11-03 22:18
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:0 
能把recv报的错误信息打出来么?这样啥也没有,不好判断

好好学习,天天想上
2013-11-03 22:38
towaywu
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-11-3
收藏
得分:0 
回复 2楼 zhaogay
recv没有报错的,现在是能获取到信息,但是其中包括了一些莫名其妙的数据,一些小串字符,最后还有一次错误请求
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

2013-11-04 07:16
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:0 
回复 3楼 towaywu
recvbuf先清空,要用printf的话,可以每次接受1023个字节,也可以把每次接受的整合到一个字符串里,最后输出。没有运行环境,纯属猜测。,楼主可以试试

好好学习,天天想上
2013-11-04 10:36
towaywu
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-11-3
收藏
得分:0 
回复 4楼 zhaogay
不管用,试过了,就是多出一些没用的尾巴
2013-11-04 15:36
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:0 
回复 5楼 towaywu
刚仿照了下楼主的代码写了个,我这边是没有出现问题的。环境是linux的。找不到楼主出现的问题在哪,坐等大神了

好好学习,天天想上
2013-11-04 16:09
towaywu
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-11-3
收藏
得分:0 
回复 6楼 zhaogay
是在window 7下,不是在linux
2013-11-04 16:59
快速回复:winsocket http协议请求,为什么recv接收的数据没有按照顺序接收,而且 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019796 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved