Учитывая, что поле длины IP-пакета равно 2 байтам, нет. Ваш поток будет разбит на пакеты не более 65k. Но поскольку TCP является потоковым протоколом, это зависит от реализации способа форматирования и отправки пакетов. Вы гарантированно получите данные, отправленные вами в том порядке, в котором вы его отправили.
Если вы хотите узнать, где находится конец ваших отправленных данных, попробуйте сначала отправить размер данных, а затем прочитать этот объем данных.
unsigned int len = vect.size();
iResult = send(ConnectSocket, &len, sizeof(len), 0); // Sending The Length
iResult = send(ConnectSocket, &vect[0], vect.size(), 0); // Sending The File
Затем на приемной стороне:
unsigned int len;
iResult = recv(socket, &len, sizeof(len), 0);
// now you know how much data to read to get your png
Также обратите внимание, что вы должны проверить, сколько отправляется во время каждого вызова send
, поскольку он не должен отправить весь буфер в одном вызове. То же самое с recv
. Возможно, вам придется позвонить recv
несколько раз, чтобы прочитать все отправленные данные.
Почему вы хотите это сделать? – pilcrow
Я не уверен, если вы здесь смущены. Вы действительно имеете в виду пакет * one * или хотите узнать, как отправить 3MB через сокет (через TCP?)? – Joe
@pilcrow , потому что у меня проблема с распознаванием конца данных изображения (потому что я хочу отправить другие данные после этих данных), пока я получаю на моем сервере python, поэтому я думаю, что нашел решение, и решение разделяйте данные на отправку данных в другой пакет. – user2367115