小编dan*_*_23的帖子

如何通过套接字接收超过1440

我在C++(Linux)中使用套接字编写了两个简单的程序服务器和一个客户端.最初它是一个示例客户端 - 服务器应用程序(回送消息发送和接收答案).接下来,我更改了客户端以实现HTTP GET(现在我不再使用我的示例服务器).它工作,但无论我设置什么缓冲区大小,客户端只收到1440字节.我希望将整个页面接收到缓冲区中.我认为这与TCP属性有关,我应该在客户端代码中实现某种循环来捕获答案的所有部分.但我不知道到底应该做些什么.

这是我的代码:

...
int bytesSent = send(sock, tmpCharArr, message.size()+1, 0);
// Wait for the answer. Receive it into the buffer defined.
int bytesRecieved = recv(sock, resultBuf, 2048*100, 0);
...
Run Code Online (Sandbox Code Playgroud)

2048*100是一个缓冲区大小,我认为这对于用于测试的相对较小的WEB页面来说已经足够了.但正如我所提到的,我只收到1440个字节.

当服务器的响应大于1440字节时,如果使用recv()函数调用捕获所有回复"部分",我该怎么办?

提前致谢.

c++ sockets linux

4
推荐指数
1
解决办法
2000
查看次数

为什么recv()在所有for循环迭代中返回'0'字节,除了第一个?

我正在用C++编写一个小型网络程序.除其他外,它必须下载推特个人资料图片.我有一个URL列表(stl :: vector).我认为我的下一步是创建for循环并通过套接字发送GET消息并将图片保存到不同的png文件中.问题是,当我发送第一条消息,收到答案段并保存png数据时,所有事情似乎都没问题.但是在下一次迭代中,通过相同套接字发送的相同消息通过recv()函数产生0个接收字节.我通过向循环体添加套接字创建代码解决了这个问题,但是我对套接字概念有点困惑.看起来当我发送消息时,应该关闭套接字并再次重新创建以将下一条消息发送到同一服务器(以获取下一个图像).这是套接字网络编程的正确方法,还是可以通过同一个套接字接收多条HTTP响应消息?

提前致谢.

UPD:这是我创建套接字的循环代码.

    // Get links from xml.
    ...
    // Load images in cycle.
    int i=0;
    for (i=0; i<imageLinks.size(); i++)
    {
        // New socket is returned from serverConnect. Why do we need to create new at each iteration?
        string srvAddr = "207.123.60.126";
        int socketImg = serverConnect(srvAddr);
        // Create a message.
        ...
        string message = "GET " + relativePart;
                message += " HTTP/1.1\r\n";
        message += "Host: " + hostPart + "\r\n";
        message += "\r\n";
        // Send a message.
        BufferArray …
Run Code Online (Sandbox Code Playgroud)

sockets http recv

2
推荐指数
1
解决办法
770
查看次数

标签 统计

sockets ×2

c++ ×1

http ×1

linux ×1

recv ×1