草庐IT

Python:从缓冲区播放视频文件

我正在开发一个python程序,它通过TCP套接字接收损坏的视频文件block。接收时,我将数据提取到一个变量中,例如:film=sock.recv(100000)我目前正在做的是将其写入“received.mp4”文件然后播放。有没有办法直接从film缓冲区播放这个视频? 最佳答案 当然可以。我会使用外部播放器,然后将block输入到它的stdin中,如下所示:#cmdline=['vlc','--demux','h264','-']#pickamediaplayer#cmdline=['mplayer','-fps','25',

tcp - 从 TcpStream 读取结果为空缓冲区

我想从TCP流中读取数据,但结果是一个空的Vec:externcratenet2;usenet2::TcpBuilder;usestd::io::Read;usestd::io::Write;usestd::io::BufReader;lettcp=TcpBuilder::new_v4().unwrap();letmutstream=tcp.connect("127.0.0.1:3306").unwrap();letmutbuf=Vec::with_capacity(1024);stream.read(&mutbuf);println!("{:?}",buf);//prints[]当我

windows - 如果不调用 recv,来自 TCP/IP 的缓冲区在哪里?

假设我有一个监听端口X的服务器。多个客户端连接到服务器并通过send命令发送数据。如果服务器没有有recv例程来“刷新”缓冲区,会发生什么情况?缓冲区是驻留在您自己的进程中还是在Windows中?是否还可以“DDos”呢? 最佳答案 WhathappensiftheserverdoesNOThavearecvroutineto"flush"thebuffer?对应于该套接字的接收缓冲区将被填满。当发生这种情况时,UDP将默默地丢弃传入的数据报。TCP将丢弃传入的数据报并且不确认它们,从而触发拥塞控制(在Reno/XP下将窗口大小减半

java - 通过套接字发送 10 MB 的缓冲区 - block 还是整个 10MB?

我正在将必须从我的C++函数发送到Java的详细信息转换为字符串和将通过套接字发送的char*。我的缓冲区大小是10MB。我可以一次发送10MB还是应该拆分并作为更小的内存块发送?这两种方法有什么区别?如果我应该发送较小的内存,block大小应该是多少? 最佳答案 CanIsendthe10MBinoneshot是的。orshouldIsplitandsendaschunksofsmallermemory?没有。Whatisthedifferencebetweenthosetwoapproaches?不同之处在于,在情况1中,您让T

c++ - 关于数据包和缓冲区大小的 TCP 套接字编程

我知道在TCP中没有数据包的概念,因为它是一个流套接字,那么例如,如果我有一个2000字节的数据包,比如2000'a',并且我的默认缓冲区大小是1024,那么它是应该发送两次并接收两次?所以对于send()函数,iResult=send(s,sendbuf,packet_size,0);第二个参数应该填什么?分配了1024字节的发送缓冲区字符指针或分配了2000字节的数据包字符指针,它会自动为我处理?对于recv()阻塞函数,我应该将缓冲区字符指针指向第二个参数还是数据包参数?对于header,我的friend建议我添加4个字节的header来存储数据包信息,例如。数据包的序列号和大小

C++ TCP recv 未知缓冲区大小

我想使用函数recv(socket,buf,len,flags)来接收传入的数据包。但是我在运行前不知道这个数据包的长度,所以前8个字节应该告诉我这个数据包的长度。我不想只分配一个任意大的len来完成这个所以是否可以设置len=8有buf是一个类型uint64_t。之后memcpy(dest,&buf,buf)? 最佳答案 由于TCP是基于流的,所以我不确定您指的是什么类型的包。我假设您指的是应用程序级包。我的意思是包是由您的应用程序定义的,而不是由像TCP这样的底层协议(protocol)定义的。为了避免混淆,我将称它们为消息。我

c# - .NET 套接字缓冲区溢出没有错误

我有一个线程正在通过这样的套接字接收数据:while(sock.Connected){//ReceiveData(Blockifnodata)recvn=sock.Receive(recvb,0,rlen,SocketFlags.None,outserr);if(recvn而且我不断看到我的解析函数中偶尔出现错误,表明消息无效。起初,我以为我的tokenizer类坏了。但是在将所有传入字节记录到分词器之后,事实证明recvb中的原始字节不是有效消息。我认为使用tcp数据流不可能发生像这样损坏的数据。我想这一定是某种类型的缓冲区溢出所以我设置了sock.ReceiveBufferSize

c++ - 缓冲区溢出会发生什么?

我在某处读到每个TCP连接都有自己的125kB输出和输入缓冲区。如果此缓冲区已满,但我仍继续在Linux上发送数据,会发生什么情况?根据http://www.kernel.org/doc/man-pages/online/pages/man2/send.2.html数据包只是静静地丢弃,没有通知我。我能做些什么来阻止这种情况发生?有什么方法可以查明我的部分数据是否至少已正确发送,以便我可以在稍后的某个时间点继续? 最佳答案 简短的回答是这样的。TCP套接字上的“发送”调用只会阻塞,直到TCP滑动窗口(或内部队列缓冲区)由于远程端点接

c# - 如何在C#中获取套接字缓冲区大小

我有一个通过TCP/IP进行通信的套接字代码。我与之通信的机器在其缓冲区中有缓冲区数据。目前我正在尝试使用此代码获取缓冲区数据。bytedata=newbyte[1024];intrecv=sock.Receive(data);stringData=Encoding.ASCII.GetString(data,0,recv);但是这段代码只检索了11行数据,而机器缓冲区中有更多数据。这是因为我使用了intrecv=sock.Receive(data);并且数据是1024?如果是,如何获取总缓冲区大小并将其检索到字符串中。 最佳答案 如

C - 填充 TCP 套接字发送缓冲区

我正在尝试编写一个实验性的客户端/服务器程序来证明当发送缓冲区已满时写入是否失败或阻塞。基本上,我在发送程序上有一个无限循环,我使用select()检查我是否可以在缓冲区上写入(我认为这意味着套接字缓冲区未满),如果我可以在缓冲区上写入比我写()一个字符。当FD_ISSET(sockfd,&writefds)为false时,循环中断(我无法写入缓冲区,因为它已满)。接收程序在开始read()之前休眠一分钟。我希望发送者在此休眠时间内填充缓冲区,但事实上,程序永远不会结束。发件人:intmain(intargc,char*argv[]){charbuffer[100];intsockfd