Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
Windows 拥有winsock';s发送功能块?_Windows_Visual Studio 2010_Winsock - Fatal编程技术网

Windows 拥有winsock';s发送功能块?

Windows 拥有winsock';s发送功能块?,windows,visual-studio-2010,winsock,Windows,Visual Studio 2010,Winsock,在另一端接收到发送的数据包之前,是否可以使用winsock的发送功能块 我的最终目标是能够发送5-20mb的文件,同时仍然能够在同一连接上发送1kb的小数据包。所以我想我会让它阻塞,直到接收器收到数据包。这样,如果另一个小数据包排队,它就不会被卡住,等待大文件的其余部分被传输。不。您不需要这样做。我不确定我们会得到什么结果。。在TCP流上混合流量不会有任何用途。。你能解释一下你到底需要做什么吗。。最重要的是,在TCP中,我们永远无法确定另一个应用程序是否确实收到了pkt(它可能只是在它们的TCP

在另一端接收到发送的数据包之前,是否可以使用winsock的发送功能块


我的最终目标是能够发送5-20mb的文件,同时仍然能够在同一连接上发送1kb的小数据包。所以我想我会让它阻塞,直到接收器收到数据包。这样,如果另一个小数据包排队,它就不会被卡住,等待大文件的其余部分被传输。

不。您不需要这样做。

我不确定我们会得到什么结果。。在TCP流上混合流量不会有任何用途。。你能解释一下你到底需要做什么吗。。最重要的是,在TCP中,我们永远无法确定另一个应用程序是否确实收到了pkt(它可能只是在它们的TCP缓冲区中)…

只需使用两个单独的TCP连接即可。它们甚至可以连接到相同的主机和端口,您端的端口号将不同


在任何网络上停止并等待握手(即不是环回)的速度都会非常慢。

您可以改为发送包裹的大小

struct MyNetworkPackage {
    int size;
    char* data;
};
如果从发送大小开始,您可以在另一端推断哪些数据属于哪个包。

我也尝试过解释winsock。

如果有前一个数据包仍在发送,“发送”似乎会被阻止。

因此,如果我先发送一个大数据包,然后再发送一个小数据包,tcp会在发送大数据包的同时发送小数据包吗?tcp只是一个流,如果执行一个send()调用,可能需要多个recv()调用以读取另一端的数据。相反,可能会合并多个send()调用,并使用一个recv()调用读取。如果你想发送“数据包”,或者在收到数据包/消息时得到回复,你必须在TCP之上建立自己的协议。你确定吗?我认为tcp的意义在于它可以为您进行这种管理。我从来没有听说过一次发送多个数据包会在接收时合并为1。@brone,你错了,TCP不保留写/发送边界。TCP提供字节流,而不是数据包/消息。多个send()调用可以合并到更大的传输块(Nagle)中,可能需要多个send()调用才能发送大量数据,也可能需要多个recv()调用才能读取单个数据块。您确实需要在数据中使用应用程序级协议来检测消息之间的边界(无论如何,这是一个应用程序级概念,而不是套接字概念-至少对于TCP而言)。我以前也多次在行动中看到这一点。我见过的大多数主要套接字库都是针对这两种情况编写的,因为它们确实发生过+但是,对于多个连接,1