我正在尝试使用boost.asio库发送大量字节,如下所示:
void tcp_send(boost::asio::io_service &io, const char *dst_ip, uint16 dst_port)
{
uint8 *sbuff;
size_t slen;
ip::tcp::socket sock(io);
sock.connect(ip::tcp::endpoint(ip::address::from_string(dst_ip), dst_port));
sbuff = new uint8[100412];
sbuff[0] = 67;
sbuff[1] = 193;
sbuff[2] = 136;
sbuff[3] = 60;
boost::asio::async_write(sock, boost::asio::buffer(sbuff, 100412),
boost::bind((&send_handler), placeholders::error));
}
当我使用wireshark检查传输字节数时,发送方总是只发送65536字节的数据,不包括TCP头字节。那么问题是什么呢?
有什么参数需要修改吗。
我在linux ubuntu上运行这个应用程序。看来传输字节的最大数目是2 ^ 16。
最佳答案
TCP是一个流。IP数据报或以太网帧中出现的字节数应该与您无关。
成功调用send
并不一定意味着数据已经发送;只是TCP堆栈接受了数据并承诺发送它(除非指定PSH)。