有人可以告诉我一种方法来通过TCP使用write()发送只有一部分字符数组?我想送前255个字节,然后作为另一个数据块发送下一个255个字节,如等/遗留而不是全部数据变量:如何用write()套接字编程发送字符数组的一部分
n = write(newsockfd,data,strlen(data));
有没有办法做到这一点?
有人可以告诉我一种方法来通过TCP使用write()发送只有一部分字符数组?我想送前255个字节,然后作为另一个数据块发送下一个255个字节,如等/遗留而不是全部数据变量:如何用write()套接字编程发送字符数组的一部分
n = write(newsockfd,data,strlen(data));
有没有办法做到这一点?
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;
}
或者:
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;
}
我尝试了第二批代码,由于某种原因,它很容易中断。如果我的文件超过几百字节,或者我一次发送太多,它会在我发送后停止,并且客户端没有收到任何内容......真是令人困惑。 – user2644819
只测试了超过94-95字节的任何内容,并且不再向客户端发送任何内容。什么会造成这种情况? – user2644819
如果使用send()而不是write(),你有同样的问题吗?你确定你的客户正在阅读和确认数据吗?您是否使用Wireshark等数据包嗅探器查看了网络流量? –
与'255'替换'strlen的(数据)'? – goji
我在想这个,我想我不明白write()就够了。如果我做255它将读取第一个255字节,但如果我想然后发送char数组的下一个255字节呢?我试图发送数据块而不是一个完整的东西。 – user2644819
然后您需要继续重复,直到您剩下<255个字节。在这种情况下,你发送剩下的东西。这将涉及跟踪您的数据缓冲区已经发送了多少,并相应地通过缓冲区。我猜这是作业? – goji