Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用write()套接字编程发送部分字符数组_C_Sockets_Tcp - Fatal编程技术网

C 如何使用write()套接字编程发送部分字符数组

C 如何使用write()套接字编程发送部分字符数组,c,sockets,tcp,C,Sockets,Tcp,有人能告诉我一种使用write()通过TCP只发送部分字符数组的方法吗?我希望发送前255个字节,然后作为另一个数据块发送下一个255个字节,依此类推/剩余,而不是发送整个数据变量,例如: n = write(newsockfd,data,strlen(data)); 有办法做到这一点吗?int len=strlen(数据); int len = strlen(data); for (int i = 0; i < len; ) { n = write(newsockfd, &a

有人能告诉我一种使用write()通过TCP只发送部分字符数组的方法吗?我希望发送前255个字节,然后作为另一个数据块发送下一个255个字节,依此类推/剩余,而不是发送整个数据变量,例如:

 n = write(newsockfd,data,strlen(data));
有办法做到这一点吗?

int len=strlen(数据);
int len = strlen(data);
for (int i = 0; i < len; )
{
    n = write(newsockfd, &data[i], min(len-i, 255));
    if (n < 0) {
        // error, do something ...
        break;
    } 
    i += n;
}
对于(int i=0;i
或:

char*ptr=数据;
int len=strlen(数据);
而(len>0)
{
n=写入(newsockfd,ptr,min(len,255));
if(n<0){
//错误,做点什么。。。
打破
} 
ptr+=n
len-=n;
}

255
替换
strlen(数据)
?我在想这个问题,我想我对write()的理解还不够透彻。如果我执行255,它将读取前255个字节,但如果我想在这之后发送字符数组的下一个255个字节,该怎么办?我正在尝试以块而不是一整件事的形式发送数据。然后,您需要不断重复,直到剩下<255字节。在这种情况下,您将发送剩余的内容。这将涉及跟踪发送了多少数据缓冲区,并相应地通过缓冲区。我猜这是家庭作业?我发现这本书是一个很好的介绍:希望有帮助。那么有没有某种类型的指针/计数器可以跟踪我们正在读取的某些特定数据(在本例中是数据变量)的写入位置。我的印象是,如果我们重复同样的事情,它只会读取相同的255字节。我尝试了第二批代码,由于某种原因,它很容易崩溃。如果我的文件超过了几百个字节,或者我一次发送了太多的文件,那么在我发送之后它就会暂停,而客户端没有收到任何东西。。。真的很困惑。只测试了超过94-95字节的任何内容,它不再向客户端发送任何内容。什么原因会导致这种情况?如果使用send()而不是write(),是否也会出现同样的问题?你确定你的客户确实在阅读和确认数据吗?你有没有像Wireshark那样用数据包嗅探器查看过网络流量?
char *ptr = data;
int len = strlen(data);

while (len > 0)
{
    n = write(newsockfd, ptr, min(len, 255));
    if (n < 0) {
        // error, do something ...
        break;
    } 
    ptr += n
    len -= n;
}