2013-10-02 19 views
0

有人可以告诉我一种方法来通过TCP使用write()发送只有一部分字符数组?我想送前255个字节,然后作为另一个数据块发送下一个255个字节,如等/遗留而不是全部数据变量:如何用write()套接字编程发送字符数组的一部分

n = write(newsockfd,data,strlen(data)); 

有没有办法做到这一点?

+0

与'255'替换'strlen的(数据)'? – goji

+0

我在想这个,我想我不明白write()就够了。如果我做255它将读取第一个255字节,但如果我想然后发送char数组的下一个255字节呢?我试图发送数据块而不是一个完整的东西。 – user2644819

+1

然后您需要继续重复,直到您剩下<255个字节。在这种情况下,你发送剩下的东西。这将涉及跟踪您的数据缓冲区已经发送了多少,并相应地通过缓冲区。我猜这是作业? – goji

回答

1
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; 
} 
+0

我尝试了第二批代码,由于某种原因,它很容易中断。如果我的文件超过几百字节,或者我一次发送太多,它会在我发送后停止,并且客户端没有收到任何内容......真是令人困惑。 – user2644819

+0

只测试了超过94-95字节的任何内容,并且不再向客户端发送任何内容。什么会造成这种情况? – user2644819

+0

如果使用send()而不是write(),你有同样的问题吗?你确定你的客户正在阅读和确认数据吗?您是否使用Wireshark等数据包嗅探器查看了网络流量? –

相关问题