C++ C++;限制tcp连接上的数据

C++ C++;限制tcp连接上的数据,c++,sockets,tcp,binary-data,bandwidth,C++,Sockets,Tcp,Binary Data,Bandwidth,我在c++中编写了本地主机中客户端和服务器之间的简单tcp/ip连接。它通过tcp/ip发送一个无符号字符数组。此阵列的大小如下所示: unsigned char *bytes = (unsigned char*)malloc(sizeof(unsigned char)*96000000); //array is filled 但是当我在插座上写的时候 n = write(sockfd,bytes,96000000); if(n<0){ cout <

我在
c++
中编写了本地主机中客户端和服务器之间的简单
tcp/ip
连接。它通过tcp/ip发送一个
无符号字符数组
。此阵列的大小如下所示:

unsigned char *bytes = (unsigned char*)malloc(sizeof(unsigned char)*96000000);

//array is filled
但是当我在插座上写的时候

    n = write(sockfd,bytes,96000000);
    if(n<0){
        cout << "error writing"<< endl;
        exit(1);
    } else{
        cout << "bytes written " << n <<endl;
    }
n=write(sockfd,字节,96000000);
如果(n)
在TCP/IP连接中可以写入的字节数是否有限制?如何解决此问题

是-您的TCP堆栈(可能是操作系统的一部分)不会简单地让你的应用程序将任意数量的数据排队,可能会占用你应用程序外部的大量缓冲内存。相反,它的缓冲区大小有限,在缓冲区满后,你需要循环并将更多数据排队到缓冲区中—通过进一步调用
write
—在实际发送一些数据之后通过网络.So循环并从上一次发送停止的位置重新发送:如果您的套接字未设置为非阻塞,则调用将阻塞,直到有更多的缓冲区可用

为什么?

可能有几个原因。可能存在某种物理限制(硬件)。客户端缓冲区可能已满。可能已达到某种实现限制。可能已接收到某种信号

在TCP/IP连接中可以写入的字节数是否有限制

限制约为2^32字节

我怎样才能解决这个问题

跟踪每次写入发送的数据量,并一直写入,直到写入缓冲区中的所有数据


我没有添加示例,因为第一个问题可以通过检查write()文档来回答,第二个问题可以通过快速搜索得到答案,第三个问题已经有很多示例了。

@L.Joe服务器端有点不同-您可以循环或-在支持它的实现上-使用
MSG_WAITALL
标志,请参阅。